SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Copyright © 2013 Instantiations, Inc.
Scintillating! A Modernized Text
Editor for VA Smalltalk
Seth Berman
Software Engineer
Instantiations, Inc.
Scintillating! A Modernized Text
Editor for VA Smalltalk
Seth Berman
Software Engineer
Instantiations, Inc.
Scintillating! A Modernized Text
Editor for VA Smalltalk
Seth Berman
Software Engineer
Instantiations, Inc.
Copyright © 2013 Instantiations, Inc.
Requirements
• Provide a modern text editor
• Additional visual cues and styling
• Take advantage of the latest technologies
• Minimize change to our existing system
• Maintain full API compatibility with existing editor
• Structural compatibility with our widget frameworks
• Must be inline with our cross-platform roadmap
• GTK
• New capability must be made accessible to our
customers
Copyright © 2013 Instantiations, Inc.
Scintilla
• Free library providing functionality to help build
text editors
• Provides numerous features specific to source
code editing
• Initial release in 1999
• Active community
• Used by Code::Blocks, Notepad++, TortoiseSVN
• Cross-Platform support
Copyright © 2013 Instantiations, Inc.
Scintilla Integration in VAST
• Integrated into our Common Widgets Framework
• New CwScintillaEditor widget integrated
• Offers full API support for Scintilla 3.3.3 (the
latest)
• Compatibility methods implemented to provide
100% API capability with our existing legacy
editor components
Copyright © 2013 Instantiations, Inc.
Direct2D/DirectWrite
• Microsoft’s technology to provide higher quality
font rendering
• Hardware-Accelerated Rendering
• Offloads many aspects of rendering to the GPUs
• Windows 7 and above
• How noticeable a difference? Depends on
• Font type and style
• Monitor type and size
• Your eyes and/or attention to detail
Copyright © 2013 Instantiations, Inc.
Text Editor Basics
• Auto-Indent
• Keyboard Shortcuts
• <Tab> to indent, <Shift+Tab> to unindent
• <Alt+Up/Down> to move blocks of selected text one
line at a time
• DragNDrop to relocate blocks of selected text
• Margin Area
Copyright © 2013 Instantiations, Inc.
Multiple Undo/Redo
• Finally!
• No hard limit (only memory)
• Supports coalescing
• Combine contiguous insertions and deletions into single
undo operations
• APIs for user-defined coalescing
Copyright © 2013 Instantiations, Inc.
Code Completion
• Scintilla offers a code completion popup and API
• We hooked it up to our code completion engine
• Users have the option to select which popup they
prefer
• Basic (Minimal styling capability)
• Extended (Maximum styling capability)
• Scintilla (Somewhere in the middle)
Copyright © 2013 Instantiations, Inc.
Syntax Color Highlighting
• Scintilla Lexer defines how a specified range of
text is to be colored
• Has lexer support for 80+ languages
• Smalltalk is one of them, but it was too simplistic
• Provides hooks to allow us to write our own custom
lexer in Smalltalk (Container-Defined Styling)
• Container-Defined Styling
• Scintilla specifies what needs to be styled via events
• VAST’s custom styler defines how the character range is
to be styled
Copyright © 2013 Instantiations, Inc.
VAST Custom Styler
• Comes in 2 flavors
• Method styler to style text in browsers and debuggers
• Optimized to style methods
• Snippet styler to style text in inspectors and workspaces
• Optimized to style snippets of code
• Adds some fuzzy logic rules
• Now we can offer color in our inspectors and workspaces
• Styler uses a custom token scanner instead of
parse trees
• Enables real-time coloring
• Much more flexible then our previous parse-tree
implementation
Copyright © 2013 Instantiations, Inc.
Bracket Highlighting
• Stylization used to indicate matching characters
for ()[]{}
• Separate style used to highlight unmatched
characters
Copyright © 2013 Instantiations, Inc.
Bracket Highlighting Cont…
• Bracket Highlighting is configurable
Copyright © 2013 Instantiations, Inc.
Smart Highlighting
• Adding stylization to a selected word and any
matching word in the source
• Useful for seeing local variable usage
• Adds extra decoration to highlighting browsers
• Added logic to handle block argument
highlighting
• Stylization applied behind text so syntax color
highlighting shows through
Copyright © 2013 Instantiations, Inc.
Smart Highlighting Cont…
• Where is the argument, anInteger, used?
Copyright © 2013 Instantiations, Inc.
Smart Highlighting Cont…
• Identify where variables are declared with a
glance
Copyright © 2013 Instantiations, Inc.
Smart Highlighting Cont…
• Block-args included…
Copyright © 2013 Instantiations, Inc.
Smart Highlighting Cont…
• Smart Highlighting is configurable
Copyright © 2013 Instantiations, Inc.
Line Numbers
• Available in
Browser/Debuggers/Workspaces/Inspectors
• Line Number margins are dynamically sized
• Configurable across different window types
Copyright © 2013 Instantiations, Inc.
Breakpoint Management
• Persistent Breakpoint margin
• New Breakpoint icons
• Multiple Breakpoints / Line support
• Stylizes Breakpoint regions
Copyright © 2013 Instantiations, Inc.
Debugger Call Tips
• Hover mouse over variables and globals displays
a calltip showing it’s value
• Clicking a calltip will bring up an inspector
• Long calltips are formatted to single-line
Copyright © 2013 Instantiations, Inc.
Debugger Call Tips Cont…
• Call Tips are configurable
Copyright © 2013 Instantiations, Inc.
Error/Warning/Info Indicators
• Stylized Squiggle lines underneath text to
indicate
• Fatal Errors
• Errors
• Warnings
• Info
• Calltips provide information about the indicator
• Incremental compiler runs in the background to
identify issues in real-time
• Collects information from parse trees and the styler
Copyright © 2013 Instantiations, Inc.
Error/Warning/Info Indicators
Cont…
• Instantly identify misspelled variables
Copyright © 2013 Instantiations, Inc.
Error/Warning/Info Indicators
Cont…
• Identify methods not implemented
Copyright © 2013 Instantiations, Inc.
Error/Warning/Info Indicators
Cont…
• Some more examples…
Copyright © 2013 Instantiations, Inc.
Error/Warning/Info Indicators
Cont…
• Indicators are configurable
Copyright © 2013 Instantiations, Inc.
Questions?

Weitere ähnliche Inhalte

Ähnlich wie Scintillating

VA Smalltalk Update
VA Smalltalk UpdateVA Smalltalk Update
VA Smalltalk Update
ESUG
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
Dmytro Mindra
 

Ähnlich wie Scintillating (20)

VA Smalltalk Update ESUG2014
VA Smalltalk Update ESUG2014VA Smalltalk Update ESUG2014
VA Smalltalk Update ESUG2014
 
VA Smalltalk Update
VA Smalltalk UpdateVA Smalltalk Update
VA Smalltalk Update
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
 
Using the Java Client Library by Noah Crowley, DevRel | InfluxData
Using the Java Client Library by Noah Crowley, DevRel | InfluxDataUsing the Java Client Library by Noah Crowley, DevRel | InfluxData
Using the Java Client Library by Noah Crowley, DevRel | InfluxData
 
VA Smalltalk Update
VA Smalltalk UpdateVA Smalltalk Update
VA Smalltalk Update
 
InfluxDB 2.0 Client Libraries by Noah Crowley
InfluxDB 2.0 Client Libraries by Noah CrowleyInfluxDB 2.0 Client Libraries by Noah Crowley
InfluxDB 2.0 Client Libraries by Noah Crowley
 
Babel.pptx
Babel.pptxBabel.pptx
Babel.pptx
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
 
Arbortext and APP for Developers - APPWorld 2011
Arbortext and APP for Developers - APPWorld 2011Arbortext and APP for Developers - APPWorld 2011
Arbortext and APP for Developers - APPWorld 2011
 
Innovations in Sencha Tooling and Framework
Innovations in Sencha Tooling and FrameworkInnovations in Sencha Tooling and Framework
Innovations in Sencha Tooling and Framework
 
Microservices in Go with Go kit
Microservices in Go with Go kitMicroservices in Go with Go kit
Microservices in Go with Go kit
 
Shindig Apachecon Asia 09
Shindig Apachecon Asia 09Shindig Apachecon Asia 09
Shindig Apachecon Asia 09
 
UCSY CS Club Week2
UCSY CS Club Week2UCSY CS Club Week2
UCSY CS Club Week2
 
Code Inspection
Code InspectionCode Inspection
Code Inspection
 
Adminstering biztalkusingchatbot
Adminstering biztalkusingchatbotAdminstering biztalkusingchatbot
Adminstering biztalkusingchatbot
 
Benchmark Maturity of your SaaS Solution
Benchmark Maturity of your SaaS SolutionBenchmark Maturity of your SaaS Solution
Benchmark Maturity of your SaaS Solution
 
Collision 2018: CodeStar for CICD Pipelines
Collision 2018: CodeStar for CICD PipelinesCollision 2018: CodeStar for CICD Pipelines
Collision 2018: CodeStar for CICD Pipelines
 
Overview of SuiteHelp 3.1 for DITA
Overview of SuiteHelp 3.1 for DITAOverview of SuiteHelp 3.1 for DITA
Overview of SuiteHelp 3.1 for DITA
 
Docfacto release 2.4
Docfacto release 2.4Docfacto release 2.4
Docfacto release 2.4
 

Mehr von ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
ESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
ESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
ESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
ESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
ESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
ESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
ESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
ESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
ESUG
 

Mehr von ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Kürzlich hochgeladen (20)

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

Scintillating

  • 1. Copyright © 2013 Instantiations, Inc. Scintillating! A Modernized Text Editor for VA Smalltalk Seth Berman Software Engineer Instantiations, Inc. Scintillating! A Modernized Text Editor for VA Smalltalk Seth Berman Software Engineer Instantiations, Inc. Scintillating! A Modernized Text Editor for VA Smalltalk Seth Berman Software Engineer Instantiations, Inc.
  • 2. Copyright © 2013 Instantiations, Inc. Requirements • Provide a modern text editor • Additional visual cues and styling • Take advantage of the latest technologies • Minimize change to our existing system • Maintain full API compatibility with existing editor • Structural compatibility with our widget frameworks • Must be inline with our cross-platform roadmap • GTK • New capability must be made accessible to our customers
  • 3. Copyright © 2013 Instantiations, Inc. Scintilla • Free library providing functionality to help build text editors • Provides numerous features specific to source code editing • Initial release in 1999 • Active community • Used by Code::Blocks, Notepad++, TortoiseSVN • Cross-Platform support
  • 4. Copyright © 2013 Instantiations, Inc. Scintilla Integration in VAST • Integrated into our Common Widgets Framework • New CwScintillaEditor widget integrated • Offers full API support for Scintilla 3.3.3 (the latest) • Compatibility methods implemented to provide 100% API capability with our existing legacy editor components
  • 5. Copyright © 2013 Instantiations, Inc. Direct2D/DirectWrite • Microsoft’s technology to provide higher quality font rendering • Hardware-Accelerated Rendering • Offloads many aspects of rendering to the GPUs • Windows 7 and above • How noticeable a difference? Depends on • Font type and style • Monitor type and size • Your eyes and/or attention to detail
  • 6. Copyright © 2013 Instantiations, Inc. Text Editor Basics • Auto-Indent • Keyboard Shortcuts • <Tab> to indent, <Shift+Tab> to unindent • <Alt+Up/Down> to move blocks of selected text one line at a time • DragNDrop to relocate blocks of selected text • Margin Area
  • 7. Copyright © 2013 Instantiations, Inc. Multiple Undo/Redo • Finally! • No hard limit (only memory) • Supports coalescing • Combine contiguous insertions and deletions into single undo operations • APIs for user-defined coalescing
  • 8. Copyright © 2013 Instantiations, Inc. Code Completion • Scintilla offers a code completion popup and API • We hooked it up to our code completion engine • Users have the option to select which popup they prefer • Basic (Minimal styling capability) • Extended (Maximum styling capability) • Scintilla (Somewhere in the middle)
  • 9. Copyright © 2013 Instantiations, Inc. Syntax Color Highlighting • Scintilla Lexer defines how a specified range of text is to be colored • Has lexer support for 80+ languages • Smalltalk is one of them, but it was too simplistic • Provides hooks to allow us to write our own custom lexer in Smalltalk (Container-Defined Styling) • Container-Defined Styling • Scintilla specifies what needs to be styled via events • VAST’s custom styler defines how the character range is to be styled
  • 10. Copyright © 2013 Instantiations, Inc. VAST Custom Styler • Comes in 2 flavors • Method styler to style text in browsers and debuggers • Optimized to style methods • Snippet styler to style text in inspectors and workspaces • Optimized to style snippets of code • Adds some fuzzy logic rules • Now we can offer color in our inspectors and workspaces • Styler uses a custom token scanner instead of parse trees • Enables real-time coloring • Much more flexible then our previous parse-tree implementation
  • 11. Copyright © 2013 Instantiations, Inc. Bracket Highlighting • Stylization used to indicate matching characters for ()[]{} • Separate style used to highlight unmatched characters
  • 12. Copyright © 2013 Instantiations, Inc. Bracket Highlighting Cont… • Bracket Highlighting is configurable
  • 13. Copyright © 2013 Instantiations, Inc. Smart Highlighting • Adding stylization to a selected word and any matching word in the source • Useful for seeing local variable usage • Adds extra decoration to highlighting browsers • Added logic to handle block argument highlighting • Stylization applied behind text so syntax color highlighting shows through
  • 14. Copyright © 2013 Instantiations, Inc. Smart Highlighting Cont… • Where is the argument, anInteger, used?
  • 15. Copyright © 2013 Instantiations, Inc. Smart Highlighting Cont… • Identify where variables are declared with a glance
  • 16. Copyright © 2013 Instantiations, Inc. Smart Highlighting Cont… • Block-args included…
  • 17. Copyright © 2013 Instantiations, Inc. Smart Highlighting Cont… • Smart Highlighting is configurable
  • 18. Copyright © 2013 Instantiations, Inc. Line Numbers • Available in Browser/Debuggers/Workspaces/Inspectors • Line Number margins are dynamically sized • Configurable across different window types
  • 19. Copyright © 2013 Instantiations, Inc. Breakpoint Management • Persistent Breakpoint margin • New Breakpoint icons • Multiple Breakpoints / Line support • Stylizes Breakpoint regions
  • 20. Copyright © 2013 Instantiations, Inc. Debugger Call Tips • Hover mouse over variables and globals displays a calltip showing it’s value • Clicking a calltip will bring up an inspector • Long calltips are formatted to single-line
  • 21. Copyright © 2013 Instantiations, Inc. Debugger Call Tips Cont… • Call Tips are configurable
  • 22. Copyright © 2013 Instantiations, Inc. Error/Warning/Info Indicators • Stylized Squiggle lines underneath text to indicate • Fatal Errors • Errors • Warnings • Info • Calltips provide information about the indicator • Incremental compiler runs in the background to identify issues in real-time • Collects information from parse trees and the styler
  • 23. Copyright © 2013 Instantiations, Inc. Error/Warning/Info Indicators Cont… • Instantly identify misspelled variables
  • 24. Copyright © 2013 Instantiations, Inc. Error/Warning/Info Indicators Cont… • Identify methods not implemented
  • 25. Copyright © 2013 Instantiations, Inc. Error/Warning/Info Indicators Cont… • Some more examples…
  • 26. Copyright © 2013 Instantiations, Inc. Error/Warning/Info Indicators Cont… • Indicators are configurable
  • 27. Copyright © 2013 Instantiations, Inc. Questions?