 |
Time2HELP 2.0 InfoMain Goal: Customizability
Our main focus with 2.0 has been to remove hardcoded limitations, we want everything to be customizable, that the limits should be those of the output formats themselves, not constrained by some more or less arbitrary decisions done by us hardcoded into the executable. When it comes to letting the user specify what should go into the output, and how it should look like, there are essentially two different directions to take: One option is to basically hardcode the output process, combined with adding a myriad of options to let the user tweak a lot of details regarding the hardcoded output process. The other alternative is to use output templates of some sort, giving the (advanced) user a lot of control over the output, but this may be too advanced for the occasional/standard user, perhaps resulting in giving these users effectively very little "tweakability"/control of the output.
Template System Improvements
In Time2HELP 1.0 we decided to use an output template system in order to provide flexibility, we believe that there will always be users who will not be completely satisfied with any given finite set of options to tweak a hardcoded output. However, the template system in 1.0 had a lot of limitations, it was basically undocumented, there were no inheritance among templates, meaning one ended up "burning the bridges" to updates to the standard templates if one were to build custom templates. In addition, there were a lot of hidden/undocumented rules about what objects could be accessed when, and collections and their sorting order were hardcoded. Fortunately, in T2H 2.0, all of these limitations have been addressed. :-) The 2.0 analogue to templates are documented, there will be live diagrams within T2H displaying the object model available to templates, and an editor will make it easier to understand and write them. The new system supports inheritance (and overriding), meaning you can subclass the standard templates and override only the aspects you really want to change/customize. There will be no "hidden rules" as to what objects can be accessed when in the output templates, the object model can be traversed without fear of access violations.
Templates Generalized Into Scripts
In 1.0, output templates controlled the overall contents and the look of the output, and they were invoked during the build process to build the outputs. During development of 2.0, we realized that the new template system had suddenly gotten powerful enough to generalize/encode the build process itself, not only the output template part. This results in a lot of flexibility for power users, it is now possible to customize the build process itself, doing things like copying resulting output to wherever you want, rename files, ftp-upload html files to web servers, transform the in-memory representation of the code after having been loaded, but before being written to output etc. (T2H 1.0 has essentially been reduced to a handful of script instructions...)
In-Memory Object Database
The scripting engine wouldn't be complete without access to all interesting/useful information T2H has about your project, so in order to make sure the scripting engine has full access to all info, we store all info in some kind of lightweight in-memory OO "database" during the build process. (To give you an idea, Delphi code has a database scheme similar to: A Unit has 0..n Classes, a Class has 0..n Properties, a Class may have an AncestorClass, anything may have a Summary etc.) This data model is extensible, if you want to attach some other info to classes (or whatever), which scripts can react/work on, you can do that.
The Scripting Language
We have designed and implemented our own scripting language for T2H 2.0,
(Thich is a major reason why we have spent so much time on T2H 2.0!)
This scripting language is optimized for processing various kinds of inputs, accessing info in the T2H in-memory database and generating text based outputs.
The scripting language is fully buzzword compliant in that it is a strongly typed object oriented lanugage supporting obvious features like inheritance and polymorphism, but also somewhat more esoteric features like lambda expressions (via OCL), type inference and multi-methods. Unlike well-known *dynamically* typed scripting languages like Python, Perl, Ruby and PHP etc, the T2H scripting language is *statically* typed.
OCL (Object Constraint Language) Support in Scripts
T2H 2.0 scripts employ a subset of OCL (Object Constraint Language) to query T2H 2.0's in-memory database (and for expressions in general). OCL is familiar to users of Borland's Bold and ECO products, and other advanced UML related tools. (For those who don't know OCL, but knows SQL, in T2H 2.0, OCL is employed as a sort of "SQL for objects".)
Scripts + In-Memory Object Database = Power
This results in a highly customizable/flexible system, both regarding input and output. If you have some kind of structures you want documented, you can extend Time2HELP to "understand" your structures by extending the object model to incorporate your structures and writing a Time2HELP 2.0 script transforming your info into T2H's in-memory database or by writing an addin in Delphi doing the same. Then you will be able to use the general features of Time2HELP 2.0 to manipulate this "foreign" information, like add it to your help files, combined with the other info Time2HELP has available. As an example, the architecture will be flexible enough to enable thirdparties to add seamless support for features like documenting .NET assemblies.
T2H 2.0 as a Code Generator Tool
Since the scripting language of T2H is optimized for processing various kinds of information and generating text based output, it is well suited as a tool for writing code generators. We believe T2H 2.0 can be used as part of a MDA (Model Driven Architecture) toolset. DatabasesWe haven't finalized yet which (standard) database engines will be supported out of the box, but for those that will be supported, you can query these databases via SQL (from within T2H 2.0 scripts) and include this info in your help files. (It will be possible for power users to write addins to support database engines not supported by us "out of the box"). Generic database interfaces like ADO will be supported out of the box.
FAQWhen will it be released?
"When it's ready". We expect T2H 2.0 to be ready summer 2007. We plan to provide a beta to existing customers in May 2007 which will support generating Delphi 2007 style HTML Help 2 output.
Will it support Delphi.NET XML documentation output?
Yes. This is one "source" of information T2H 2.0 scripts can read into it's in-memory database, merged with other available info. Will it support MS HTML Help 2 Output?
Yes. Will it support .NET?T2H 2.x will support documentation of .NET assemblies. This will probably become available in T2H 2.1. I recently bought 1.0!
License holders that bought Time2HELP 1.0 in 2004 or later will get a free upgrade to Time2HELP 2.0. So if you buy Time2HELP 1.0 now, you will get a free upgrade to Time2HELP 2.0. Will T2H 2.0 be bloatware?No, it will be a lean and mean Win32 executable, actually smaller than T2H 1.0, and with a modern look. (The UI in T2H 2.0 assumes more (graphical) horsepower than 1.0 though).
|