Difference between revisions of "Roadmap"

From Inkscape Wiki
Jump to navigation Jump to search
(→‎2Geom 1.0: Mark tasks as done.)
(102 intermediate revisions by 14 users not shown)
Line 1: Line 1:
== Inkscape Development Roadmap ==
This is a working document showing specific near-term tasks needed for achieving the numbered milestones. It is '''not a wishlist''' of features to be included in future releases. Because people often work on whatever they feel like, only the current and current+1 releases should be taken seriously.  Beyond that is mainly conjectural.


NOTE: This is a working document showing specific near-term tasks needed for achieving the numbered milestones.
''See [[OldRoadmap]] for milestones that have already been achieved.''


''Milestones 0-12 have been completed since the start of the Inkscape Project. See [[OldRoadmap]]''
=== Inkscape 0.92 ~ Infrastructure Focus ===
* (DONE) <s>Set up autogeneration of Inkscape source code documentation ([http://wiki.inkscape.org/wiki/index.php/Doxygen_documentation Doxygen not available online according to old wiki page] but [http://fossies.org/dox/inkscape-0.91pre2/ available here (fossies.org)])</s> (http://jenkins.inkscape.org/job/Inkscape_trunk_doxygen/doxygen/)
** (DONE) <s>Put it publicly somewhere on the inkscape domain for "official" access.</s> (http://jenkins.inkscape.org/job/Inkscape_trunk_doxygen/doxygen/)
* (DONE) <s>Build system: migrate away from Autotools (See [[Build system improvements]])</s>
** (DONE) <s>Decide between CMake and Waf</s>
*** (DONE) <s>Alex will be doing a "neutral party" review of the two</s>  Decision to go with cmake for now.
** (DONE) <s>Get decided system working</s>
*** See [[CMake_Tasks]]
** (DONE) <s>Switch release tools to use new build system</s>  Documented for now; will wait on mechanizing it until after switch to git.
** (DONE) <s>Switch packaging tools to use new build system</s>
** (DONE) <s>Retain Autotools support one final release (legacy support)</s>, then drop next release.
* (DONE) <s>Make the Windows uninstaller work (reevaluate this, we now have msi installer for win32 and Win64)</s>


=== Milestone 13 - Inkscape 0.47 - Refactoring / Cleanup ===
=== 2Geom 1.0 ===
* 2geom maintenance
** (DONE) <s>Stop embedding 2Geom in Inkscape's codebase; handle it as a regular dependency</s> (https://gitlab.com/inkscape/inkscape/-/merge_requests/2109)
** (DONE) <s>Move project to gitlab, from https://launchpad.net/lib2geom, http://lib2geom.sourceforge.net/, and https://github.com/inkscape/lib2geom [kk]</s> (https://gitlab.com/inkscape/lib2geom)
** Possibly start doing lib2geom releases in conjunction with Inkscape's releases? [bryce]
** Add to PPAs and other CI / autobuilds we already use for Inkscape [alex + bryce]


New/Changed Dependencies:
=== Inkscape 1.0alpha ~ Maintenance and Optimization Focus ===
* Gtk 2.12 (required)
* (DONE) <s>Migration to Git</s>
* (DONE) <s>Migration to GitLab</s>
* (DONE) <s>Decide which Unit testing framework to use ([http://inkscape.13.x6.nabble.com/Unit-testing-td4967386.html Discussion July 2013 didn't get much traction])</s>
** Hackfest consensus is Google test.
* (DONE) <s>Set up continuous builds (e.g. Travis CI / Appveyor or gitlab)</s>
* (DONE) <s>Make C++11 compiler a hard requirement</s>
* (DONE) <s>Drop Autotools support (See [[Build system improvements]])</s>
* (DONE) <s>Migrate potrace to be an external dependency</s> Done for 0.92
* (DONE) <s>Gtk3/UI revamp</s> Down to bug fixing and follow-on work


Architectural Refactoring Effort:
* Split out less well maintained extensions to an 'extras' package
* [[Lib2geom]] Integration
** Add a test suite that runs each extension against a collection of test documents
** Eliminate code in favor of 2geom where feasible
** Possibly start doing inkscape-extras releases in conjunction with Inkscape's releases?
* Convert remaining GTK dialog code to Gtkmm
** If we don't achieve this by this release, push it to 1.1 or later
* Eliminate all use of sp_repr_new in favor of XML::Document::* classes (see [http://article.gmane.org/gmane.comp.graphics.inkscape.devel/19068])
* Split tutorials and other content from the main executable, to enable them to be updated independently of our main release process
* SubsystemRearchitecture
** Need to investigate where we stand with this, and re-evaluate more precisely what we want to do this release
** Migrate SPObject to native C++ classes
* Prepatory work for expanded testing
** Rename all '[[SPFooBar]]' routines to '[[FooBar]]' and put into namespaces
** Document how to do the tests
* Implement [http://grin-optics.org gradient] UI "release" handler to deal with gradient garbage collection (see bug 984854)
** Create or identify a good model test case
* Create an API for tracking references and avoiding id clashes on import and interdocument copy/paste. The optimal place to put it would probably be somewhere at the XML level.
** Implement example unit tests for: SP objects, verbs, cmdline options, live effects, UI dialogs, UI widgets/tools, UI view, etc.
* Streamline style.*
** Start collecting regression svg files in a testing repository somewhere
** Eliminate use of the style.h types in as much of codebase as possible, particularly display/*.
* Thorough testing of document recovery after crash. Make this more robust.
** Externally, it should present a simple set of accessor methods for getting/setting properties by name, and propagating to/from repr.
** Need to better define what we want to test
** Inside, it should have:
** How should the crash be triggered?
*** a concise list of property names with the expected domain of values in CSS and the associated Inkscape data type
** What should the document be?
*** a concise list of property aliases which represent one or more properties combined, each with the rule used to combine
** Need to be careful about what cases we actually want to consider
*** definitions of the aforementioned rules and value domains
* Improved performance
*** some generic code (not tied to any one property) implementing the needed behavior
** with an empty start
** when starting up with an existing file
** peppering printfs in the startup logic shows that some routines that should get called one time only, actually get called multiple times
** need to investigate if there is existing instrumentation tools that could be used to identify recursion or other causes of slowness during startup
* Improved mailing list archive
** Move existing archive to inkscape.org or add an archive mirror at inkscape.org ("official" inkscape information is spread out wide between different domains), this would be an improvement.
** Consider also bringing lib2geom mailing lists?
** inkscape: We need postmaster@inkscape.org and abuse@inkscape.org set up. Maybe as part of a mailing list refresh?
* Set up effort to package selected branches and organize community testing around them
** Use this initially for changes planned for landing in 1.0
** Once we're feature-frozen for 1.0, use this mechanism for wider testing of new feature work
* Gtk+ 3 migration: Goal is a clean, deprecation-free build
** Stop using GtkActions.  Migrate toolbars to use plain widgets, and GAction
** Turn Inkscape into a proper Gtk::Application.  Stop using Gtk::Main
** GtkMM/C++ify and clean up toolbar code
** Remove unused GtkAction-based widgets


Codebase Cleanup Effort:
=== Inkscape 1.0beta ~ Test Case and Documentation Writing Focus ===
* Change to use of [http://library.gnome.org/devel/glib/stable/glib-Quarks.html GQuarks] instead of #defines where feasible
* Write unit test cases
* Use autoscan and autoreconf to find out which configure tests are still needed.
** Core functions
** Trim down the amount of stuff in our configure.ac
* Better translations - keep track of % translations for all languages. Drive to 95% on all major languages.
* (PARTIALLY DONE) [[DirectoryReorgProposal]]
* Cleanup website and wiki
* Convert all tabs into spaces (convert tabs to 4 spaces)
** Move pages of value to users from wiki to the main website
** Also see http://sourceforge.net/mailarchive/message.php?msg_id=7164324
** Trim down amount of legacy material presented in the wiki
* [[http://wiki.inkscape.org/wiki/index.php/InkscapeJanitors#Cleanup:_Whitespace Remove trailing whitespace]]
* Coder stories
* Replace use of C macros (E.g. SP_IS_PATH) with C++ instance methods, static class methods, etc.
** different stories about how to do common development tasks, like hooking in a new widget or adding support of a new SVG tag
* Use [http://pmd.sourceforge.net/cpd.html Copy/Paste Detector] to find and refactor duplicated code
** have people sketch in what they know, then pass around for critique to optimize the description
** where to store the documentation?  Where would someone look?


User Documentation Effort:
=== Inkscape 1.0 ===
* Re-arrange tutorials into sub-categories
* Strict bugfix focus, with all development targeted to feature branches
* (PARTIALLY DONE) Switch to use of xml2po for tutorial files ([[User:Colin Marquardt|Colin Marquardt]])
* This will be a long term stable release series
* Document filters


Inkscape SVG Effort
-----------------------------------
* Revisit coordination system (move away from Cartesian)
'''Following is a WIP draft of the post-1.0 release goals; this is not yet finalized, and should not be taken as official yet'''
-----------------------------------


User Interface Effort:
=== Inkscape 1.1 ~ New Features ===
* Improvement of SVG patterns UI - make it similar to gradient-drag, instead of piggybacking knotholder
* Land feature branches held for post-1.0
* Palettes
* SVG Flowed Text
** Custom palettes like from Gnome
** Fix flowtext
** Ability to load 3rd-party palettes (e.g. Pantone, Trumatch, Focoltone, Toyo, etc.)
** Implement SVG 2 flowed text which has a natural SVG 1.1 fallback.
* Reenable fuzzy font matching [bulia]
** Ex. https://dl.dropboxusercontent.com/u/65084033/irc/ask-smart-questions.svg
* Improve freehand curve smoothness [pjrm, paraprax]
* Externalize some (easy) dependencies for better modularization
** Break libdepixelize out to its own library
** Break libnrtype out to its own library
** Break libuemf out to its own library
** Switch to using libcroco as a regular dependency (not embedded in our codebase).
*** Contact maintainer to see if still actively maintaining, and if can roll a new release for us
*** Else, consider adopting maintenance of the library under the Inkscape project umbrella
*** Or consider replacement with libcss or other CSS parser.
*** See http://inkscape.13.x6.nabble.com/Should-inkscape-take-over-libcroco-td2784457.html
** Switch to using Adaptagrams (libvpsc, libcola & libavoid) as a regular dependency
*** Contact maintainer to see if still actively maintaining, and if can roll a new release for us
*** Else, consider adopting maintenance of the library under the Inkscape project umbrella
*** See https://bugs.launchpad.net/inkscape/+bug/1353833
* Complete conversion to GTK 3
** Drop use of libgdl in place of GtkNotebook
** Be smarter about toolbar layout so we never have invisible (but necessary) buttons off the screen.
** Rework panels so that they resize consistently and display contents better.  Consider moving back to dialogs in some cases or moving more functionality to the canvas.
* Begin development of new plugin / extension system(s)
** C++ API with Python bindings
** Review the D-Bus scripting API GSoC work from 0.48 timeframe
** Easy to create
** Powerful enough to do LPEs, filters, etc.
** Probably need several different APIs for different levels in the codebase, such as atop the object model, one for canvas stuff, one atop the UI, etc.
*** For object layer will require better division from UI, so it doesn't require a selection for items to operate on
** Include a debug print of the loaded extensions/plugins/etc.
** Establish an Extensions Center for community-collaborative sharing/reviewing/maintaining extensions
*** Core extensions are shipped with Inkscape
*** User review ranking
*** Developer review ranking
*** Auto-QC ranking (mechanical testing, and checking for docs, test cases, etc.)
** Search the Extensions Center and install from within Inkscape
* Switch to using Poppler's API rather than using internals (the current situation causes regular breakage with new releases of Poppler)
* [[GtkMMification]]
* Improved performance
** Working with large files
** Working with files with lots of filters
* Consider setting up workflow (passing tests, test coverage, code review) for getting code into trunk.
** Improve new contributor experience for getting patch reviews
** Switch patch review software from launchpad to something like mailing list + patchwork, or phabricator
* make msi Windows install multilingual
* Implement application-scope actions and "remixable" user interfaces:
** Replace "Verbs" with application-scope Gio::Action definitions.
** Define user-interface using Gtk::Builder XML files.
** Provide command-line "headless" access to application actions.
** Provide documentation for all actions, and tutorial for GUI customization


Testing Effort:
=== Inkscape 1.2 ~ Refactoring ===
* Include some rendering tests in `make check'.
* Split backend / GUI frontend
* Get 'make check' to pass on Win32 and OSX (with the current btool, does this mean a 'btool check' should pass?)
* Flip y-coordinate to match SVG.
* Investigate performance measurement testing for Inkscape
** Introduce a backwards compatibility mechanism that will allow us to modify the XML representation of editing info. This is needed to bring the desktop coordinate system in line with SVG due to guideline and 3D box problems (they save desktop coordinates in the XML). This can be done either at the SP tree level or by moving to a SAX-based parser which updates the editing information as the document is parsed.


Animation Effort
* Create a written conceptualization of how it should work
** Currently, part of the concept discussion is at [[Animation-(Timeline)|here]]
User Documentation Effort:
* More tutorials
** Node editing
** Advanced text effects
** Grid snapping
** Connectors
** Creating photo-realistic art
Performance effort:
*Support Hardware acceleration
**Take advantage of opengl 2.1 or dx9 to enhance editing and display performance.
*Multi-Processor
**Boost performance on multi-core processor.
GUI effort:
*Layer panel
**Add object selection in layer(similar to adobe illustrator).
*Tab document
**Open and create new document(s) in the same window.
*Menu icons
**Compact icons
**Grayed icons
***Tool icons turn into color when hovering or selected
(similar to adobe illustrator).
*Multi-page
**Multi-page tool(similar to Artboard tool on adobe illustrator cs4).
Editing tool effort:
*Animated path points(similar to paint.net v3.36).
=== Milestone 14 - Inkscape 0.48 - Animation ===
File Format Support Effort:
* PDF Import/Export
** Choice of PDF spec. (PDF/X-1a, PDF/X-3)
** Add file info/comments
** Add color bars
* [[MicrosoftVisio|Visio]] support
** Add extension for use of [[VDX2SVG]] (http://vdxtosvg.sourceforge.net/)
** (OBSOLETE) Add extension for use of [[PDF2SVG]] (http://cgit.freedesktop.org/~cworth/svg2pdf/)
DOM Binding Effort:
* Evaluate Adobe Activescript to use instead of Spidermonkey for our JS engine
* Create sample prototype app to explore ActiveScript
* Decide whether to go with Spidermonkey or Adobe ActiveScript
Tools:
* [https://bugs.launchpad.net/inkscape/+bug/sf904962 correct handling of multiple font faces] by Text tool
* [http://article.gmane.org/gmane.comp.graphics.inkscape.devel/16938/ Filters tool]
* Get basic rendering and authoring of simple animations working adequately
Desktop Integration Effort:
* [PARTIALLY DONE] Inter-application cut-and-paste
* Inter-application drag-and-drop
Architectural Refactoring Effort:
* Complete lib2geom integration
DOM Binding Effort:
* Create tool that reads the w3c idl files and generates binding code
* Bind xpath parsing/execution
* Finish the CSS-DOM classes
* Add a 'run' mode in a separate window that runs and displays the scripted SVG
Desktop Integration Effort:
* [[WebDAV/FTP]] support via GVFS, KIO, Neon, or the like
* Finish making printing work more efficiently and reliably
* Clipart manager GUI
Inkboard Effort
* Ensure multi-user conferences work across most JEP-compliant Jabber servers
* Conduct an informal security analysis of Inkboard for security flaws
File Format Support Effort:
* PDF Import/Export
** Generate multipage PDF documents
** Define bleed and slug areas for offset printing
** Add crop, bleed and registration marks
Inkboard Effort
* Stabilize the code by closing crash bugs in the bug tracker
SVG Feature Compliance Effort:
* Animation
** Sketch out UI mockup ideas for animation rendering/animation
** Make an ultra-preliminary proof of concept of at least one animation feature
Extension Effort:
* Unification of the way to display help on extensions
* Localizable help of bundled extensions
* Effect extensions browser
=== Milestone 15 - Inkscape 0.49 - Prototype all SVG Mobile features ===
SVG Feature Compliance Effort:
* Ability to select which SVG spec version to save as
* Multi-page
* Animation
* Implement perspective transformations via [[PerspectiveObject]]
* Path editing
* Shaped strokes
* Masking/clippaths
** on-canvas editing (patch for 0.47 is ready)
** Should work like gradient tool to apply transparency
* [https://bugs.launchpad.net/inkscape/+bug/sf893812 hyperlinking]
* Ensure Inkscape does not throw away the internal DTD subsets of documents it reads
=== Milestone 16 - Inkscape 0.50 - SVG Mobile Support ===
SVG Feature Compliance Effort:  (Also see [[SVG Tiny Compliance]])
* Multi-page
* Scripting
* Markers
** Inherit stroke properties like color
** On-canvas editing
** Fix snapping issue
* Real CMYK / LAB / HSB support
=== Milestone 17 - Inkscape 0.51 ===
Architectural Refactoring Effort:
* cairo Adoption Effort:
** Integrate a cairo-based SVG Canvas library
* follow the [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html Freedesktop Icon Naming Spec] for easier themeing
File Format Support Effort:
* Native [[Adobe Illustrator]] file Import (DONE)/Export
** (DONE) Requires good PDF Import/Export
* Native [[CorelDraw]] file Import/Export (currently uses UniConvertor)
* DXF import/export
* Improved raster support via Gdk::Pixbuf
=== Milestone 18 - Inkscape 0.52 - Tech drawing abilities ===
User Interface Effort:
* Implement iso (DONE) & hex grid
* Editable toolbars (Gtk::Toolbar class)
* Geometrical constraints
** "Perpendicular-to", "Parallel-to", etc.
* Path trimming/extending/offset
* Filleting tool
Extensions Effort:
* Implement extension registry for users to upload/download extensions via Inkscape
* Dia-like smart shapes support
([[CAD]] and [[BlueprintGeometricAndTechDrawing]])
=== Milestone 19 - Inkscape 0.53 - Inkcore ===
* Separate sections of code into various libraries for use by other programs
** inkcanvas
** inkview
** inkscape
=== Milestone 20 - Inkscape 0.54 ===
=== Milestone 21 - Inkscape 0.55 ===
=== ??? - Inkscape 1.00 - Full SVG 1.1 support ===
=== Milestone [Future] ===


[[Category:Developer Documentation]]
[[Category:Developer Documentation]]

Revision as of 19:13, 26 June 2020

This is a working document showing specific near-term tasks needed for achieving the numbered milestones. It is not a wishlist of features to be included in future releases. Because people often work on whatever they feel like, only the current and current+1 releases should be taken seriously. Beyond that is mainly conjectural.

See OldRoadmap for milestones that have already been achieved.

Inkscape 0.92 ~ Infrastructure Focus

2Geom 1.0

Inkscape 1.0alpha ~ Maintenance and Optimization Focus

  • (DONE) Migration to Git
  • (DONE) Migration to GitLab
  • (DONE) Decide which Unit testing framework to use (Discussion July 2013 didn't get much traction)
    • Hackfest consensus is Google test.
  • (DONE) Set up continuous builds (e.g. Travis CI / Appveyor or gitlab)
  • (DONE) Make C++11 compiler a hard requirement
  • (DONE) Drop Autotools support (See Build system improvements)
  • (DONE) Migrate potrace to be an external dependency Done for 0.92
  • (DONE) Gtk3/UI revamp Down to bug fixing and follow-on work
  • Split out less well maintained extensions to an 'extras' package
    • Add a test suite that runs each extension against a collection of test documents
    • Possibly start doing inkscape-extras releases in conjunction with Inkscape's releases?
    • If we don't achieve this by this release, push it to 1.1 or later
  • Split tutorials and other content from the main executable, to enable them to be updated independently of our main release process
    • Need to investigate where we stand with this, and re-evaluate more precisely what we want to do this release
  • Prepatory work for expanded testing
    • Document how to do the tests
    • Create or identify a good model test case
    • Implement example unit tests for: SP objects, verbs, cmdline options, live effects, UI dialogs, UI widgets/tools, UI view, etc.
    • Start collecting regression svg files in a testing repository somewhere
  • Thorough testing of document recovery after crash. Make this more robust.
    • Need to better define what we want to test
    • How should the crash be triggered?
    • What should the document be?
    • Need to be careful about what cases we actually want to consider
  • Improved performance
    • with an empty start
    • when starting up with an existing file
    • peppering printfs in the startup logic shows that some routines that should get called one time only, actually get called multiple times
    • need to investigate if there is existing instrumentation tools that could be used to identify recursion or other causes of slowness during startup
  • Improved mailing list archive
    • Move existing archive to inkscape.org or add an archive mirror at inkscape.org ("official" inkscape information is spread out wide between different domains), this would be an improvement.
    • Consider also bringing lib2geom mailing lists?
    • inkscape: We need postmaster@inkscape.org and abuse@inkscape.org set up. Maybe as part of a mailing list refresh?
  • Set up effort to package selected branches and organize community testing around them
    • Use this initially for changes planned for landing in 1.0
    • Once we're feature-frozen for 1.0, use this mechanism for wider testing of new feature work
  • Gtk+ 3 migration: Goal is a clean, deprecation-free build
    • Stop using GtkActions. Migrate toolbars to use plain widgets, and GAction
    • Turn Inkscape into a proper Gtk::Application. Stop using Gtk::Main
    • GtkMM/C++ify and clean up toolbar code
    • Remove unused GtkAction-based widgets

Inkscape 1.0beta ~ Test Case and Documentation Writing Focus

  • Write unit test cases
    • Core functions
  • Better translations - keep track of % translations for all languages. Drive to 95% on all major languages.
  • Cleanup website and wiki
    • Move pages of value to users from wiki to the main website
    • Trim down amount of legacy material presented in the wiki
  • Coder stories
    • different stories about how to do common development tasks, like hooking in a new widget or adding support of a new SVG tag
    • have people sketch in what they know, then pass around for critique to optimize the description
    • where to store the documentation? Where would someone look?

Inkscape 1.0

  • Strict bugfix focus, with all development targeted to feature branches
  • This will be a long term stable release series

Following is a WIP draft of the post-1.0 release goals; this is not yet finalized, and should not be taken as official yet


Inkscape 1.1 ~ New Features

  • Land feature branches held for post-1.0
  • SVG Flowed Text
  • Externalize some (easy) dependencies for better modularization
    • Break libdepixelize out to its own library
    • Break libnrtype out to its own library
    • Break libuemf out to its own library
    • Switch to using libcroco as a regular dependency (not embedded in our codebase).
    • Switch to using Adaptagrams (libvpsc, libcola & libavoid) as a regular dependency
  • Complete conversion to GTK 3
    • Drop use of libgdl in place of GtkNotebook
    • Be smarter about toolbar layout so we never have invisible (but necessary) buttons off the screen.
    • Rework panels so that they resize consistently and display contents better. Consider moving back to dialogs in some cases or moving more functionality to the canvas.
  • Begin development of new plugin / extension system(s)
    • C++ API with Python bindings
    • Review the D-Bus scripting API GSoC work from 0.48 timeframe
    • Easy to create
    • Powerful enough to do LPEs, filters, etc.
    • Probably need several different APIs for different levels in the codebase, such as atop the object model, one for canvas stuff, one atop the UI, etc.
      • For object layer will require better division from UI, so it doesn't require a selection for items to operate on
    • Include a debug print of the loaded extensions/plugins/etc.
    • Establish an Extensions Center for community-collaborative sharing/reviewing/maintaining extensions
      • Core extensions are shipped with Inkscape
      • User review ranking
      • Developer review ranking
      • Auto-QC ranking (mechanical testing, and checking for docs, test cases, etc.)
    • Search the Extensions Center and install from within Inkscape
  • Switch to using Poppler's API rather than using internals (the current situation causes regular breakage with new releases of Poppler)
  • GtkMMification
  • Improved performance
    • Working with large files
    • Working with files with lots of filters
  • Consider setting up workflow (passing tests, test coverage, code review) for getting code into trunk.
    • Improve new contributor experience for getting patch reviews
    • Switch patch review software from launchpad to something like mailing list + patchwork, or phabricator
  • make msi Windows install multilingual
  • Implement application-scope actions and "remixable" user interfaces:
    • Replace "Verbs" with application-scope Gio::Action definitions.
    • Define user-interface using Gtk::Builder XML files.
    • Provide command-line "headless" access to application actions.
    • Provide documentation for all actions, and tutorial for GUI customization

Inkscape 1.2 ~ Refactoring

  • Split backend / GUI frontend
  • Flip y-coordinate to match SVG.
    • Introduce a backwards compatibility mechanism that will allow us to modify the XML representation of editing info. This is needed to bring the desktop coordinate system in line with SVG due to guideline and 3D box problems (they save desktop coordinates in the XML). This can be done either at the SP tree level or by moving to a SAX-based parser which updates the editing information as the document is parsed.