El Muerte/Journal History 2
UnCodeX
Status reports
1-2-2003 Ok the first step works. I created a class tree from scratch in 35 seconds (source dir was on a SMB drive so might be faster when I read those file from a local machine). Also created a token parser to easily read the contents of the source.
1-2-2003 Eek. Evolution just noted me on a nice issue: multiple classes with the same name in diffirent packages. So let's see you have the following:
+ Object | +- SomeClass (in Package1) | + SomeClass (in Package2)
How to detect that ?! The only way I can think of is is using a package priority list.
2-2-2003 Argh, the whole tree creation time takes about 5 second now, but when there are classes with the same name in diffirent packages it breaks tree. And I can't think of a good method to create the tree and keep the algorithm fast enough.
2-2-2003 Woohoo, found a way to use the package priority in the routine. Now the tree will only break when the package priority has not been set, and that doesn't matter much, I'll add a warning on startup when a package has not been prioritised
2-2-2003 Ok if people want to test the current version you can download it , you have to edit the UnrealTree.ini file to point to the correct location.
3-2-2003 Started on the class parsing, consts and vars work. But I need to check on types of dynamic array, class and inline enums. It's still very fast
3-2-2003 enums and vars of type array/class and inline enums are now parsed correctly. (new alpha available, right click the class tree for more options)
4-2-2003 functions are also detected and almost parsed completely, same for structs. so at this time I'm able to convert a unreal class to an object with all the class it's features. Parsing the Actor class costs about 0.01 second. I think I can start the part of the HTML output. I'm going to implement the HTML output using templates for each part of the class, this way you can completely customise the way the HTML files are constructed.
6-2-2003 Now working on the ouput module, I need a very fast replacement engine to use with templates. Before I start to write my own does anyone know of a good (basis) replacement engine for Delphi\ObjectPascal. I tried TemplatePower and it's too slow.
6-2-2003 Started to work on my own parser, it's fast enough. The current alpha produces all the files except the class files, and does this in a little over 2 second (43 files). I've supplied a basic template with the alpa, replacements are between '%' tokens. Note, you have to start UnrealTree with the correct working directory set to the location of UnrealTree or else it can't find the template files.
To create the HTML files you first have to create the class tree.
6-2-2003 Fixed a couple of parsing error related to the cpptext {} blocks and appear in the normal source. Also added a global ignore on state and code, need to work on state processing. All these cool features in UScript make it pretty hard to parse. At the moment analysing all 1380 classes takes 5.5 seconds, and creating all HTML files takes 18 seconds (class files are not complete). Anyway, so far so good, performance is realy better than I ever expected.
7-2-2003 Again some more fixes in the analysing code. Also added a new option to scan for orphan classes. Use this to tweak the Package Priority settings, when the priority is correct you should have no orphan classes. The class overview HTML file how has some more info, the rest is coming. Also need to focus on type links
10-2-2003 I need to scan functions inside the states because these functions are often used, that means I have to process state definitions because functions overwrite themselfs in states. Searching for an already defined method takes a lot of time since it has to go through the whole list everytime. So this could better be done on the output processing. But now the difficult part, state processing. The syntax of a state:
[modifiers] state <name> [extends <name>] { [ignores <method>, <methods>, ...;] [methods ... [label: code; label: code; ...] ...] }
The problem with this is that you don't know a function declaration until you find the correct keyword, checking on a semi colon is not enough since the following code is still parsed as a possible function. If UScript enoforced labels to be at the end of the statement this wouldn't be a problem, but is it enforced?
I also need some nice images for buttons and stuff.
10-2-2003 State processing is done now, also fixed a couple of other bugs in the analyser. Most of the analyser code is done. My main focus is output processing. At this time it takes about 1 minute to generate all HTML files from scratch (including analysing of the code).
10-2-2003 My current implementation of the type link caching is pretty slow, it doubles the time needed for HTML generation, and I only resolve the return values of functions not even the params. I think it's because of the site of the string list since it didn't matter if I used an straight list or an inheritance list for the class generation. So I guess I need create a diffirent type for the cache.
11-2-2003 Found a pretty excelent StringHash class for delphi that brings back the HTML generation back to 45 seconds. There's just one issue and that's with classes with the same name, this might screw up the link to the type, but there's not much I can do about it.
12-2-2003 Fixing things up on the alpha, beta should be there soon. Made a nice UnrealWiki style as default template.
15-2-2003 The tree state can now be saved and loaded, it's a bit faster than rebuilding the tree when the files are already cached on the file system. Also changed the templates a bit to include titles, this way when an class doesn't have functions it won't display the function heading. Still thinking weather or not I should include inherited vars/enums/structs/... It's quite usefull.
17-2-2003 Fixed a stupid bug in state loading, and implemented the inherited properties list. Need to cache this tho, takes a pretty long time an Object is scanned 1400 times Also need to add an option for max inherited classes, I don't people want to inherit upto object everytime.
17-2-2003 Fix another bug in the state loading. Also inherited properties are now cached, makes it a lot faster, 90 seconds for all HTML files. Also put in a configurable limit (in template). Also sorted all the properties. Forgot the other things I fixed/changed.
19-2-2003 renamed it to UnCodeX, it's a much better name. Finishing up some code, and implementing two new things, a glossary and classtree (in HTML). Need to address a few things before I make it beta, types: class<..> and array<..> also make sure all < and > are translated to the correct HTML special chars
24-2-2003 fixed the array<..> return types of functions. Also implemented the glossary, and I need to redesign this because it's too slow and too big. Also resolved the types array<> and class<> and fixed the <, > and " characters in the HTML output.
27-2-2003 Improved the glossary code to create more pages (for every letter one), HTML generation now takes about 90 seconds. Also added replacements for package path and class filename so you can link to the source code from the browser, if you set things right the browser should open your favorite editor. Too bad that Mozilla really downloads the file from disk to disk and then launches the application. MSIE does open the direct file.
2-3-2003 Finishing up the alpha version, added the Class Tree page and changed the page footer replacements. UnCodeX is almost full featured. If anyone has some ideas for extra feature please contact me.
2-3-2003 Add support of MS HTML Help generation, all you have to do is install MS HTML Help Workshop, config UnCodeX to point to the HTML Help Workshop path and press the button (after you created the HTML files). A .chm file will be created (should spare you about 1000% diskapce.
4-3-2003 Fixed a parser bug introduced in a few version back. Also optimized the HTML Help creation a bit. Added buttons to add/remove packages from the priority listing. Well this is the final alpha version. Should be finishing the code now and make it beta.
6-3-2003 Started a bit on the polishing of the interface. Most things can now be turned of and stuff, except for the menu bar, when I hide it the System Menu addition get's screwed. Also worked a bit to get UnCodeX working as a Application Toolbar (like the taskbar and ICQ), but dang you have to do a lot of stuff yourself, I expected that I just had to announce that my app was a toolbar and that the window manager would do the rest. Oh, and I moved the log file to a horizontal position. Also from now on the source is available from my CVS server, watch out for messy code.
6-3-2003 Added the run and join server commands, also implemented the compile class method. For the rest nothign serious.
7-3-2003 Improved the App Bar feature, it should work now much better, also fixed the menu hiding. The only problem is that you can not unhide the menu bar when you are in App Bar mode. So I need to add a caption button to display the "View" menu since the System menu is disabled in that window type. Also need to implement to binding to other sides of the screen.
10-3-2003 Well finally finished the AppBar feature, it can now be bound to the left and right side of the screen. Also you can start it as a app bar. Some funky shit happened here when you switched back to a normal windows. But by called two functions the other way around it was fixed. Any graphic artist in the room ? I need some original art for the buttons.
10-3-2003 Again some points off my todo list. Still not sure about implemented the "grep" feature. Ofcourse it's cool to add as much functionality as possible to the app, but it should remain a 'tool' not a unusable swiss army knife. Also thought about adding a tool menu, but I don't think it's a good idea. UnCodeX is a tool, a tool that you would start from your favorite editor.
11-3-2003 Implemented a full text search with regex support so search the body of all scanned classes, it's quite fast. Also added a search history to both the FTS and class search feature. And ofcourse added the option to ignore packages, I wonder why I forgot that one.
13-3-2003 Here's an idea, caching the class details, it is usefull but requires a lot of memory thus create longer loading time. Another idea is to analyse on the fly when a class is selected, this however won't give you the ability to scan up the tree for inherited properties. But I don't think it would be wise to include inherited properties since usually there's already more than enough to display.
Note, also add the default properties to the class.
20-3-2003 Need to find a fast way to store/load class details and use it together with the last change date of a file. This way I could dynamically reload the class when it has changed (as long as it's parent hasn't changed). Also with the saving of class details I could add a much better tags support than ctags can provide. There should be a way to add those tags to the editor no matter what (using keypress simulations), but this can be tricky. But first, create a fast class detail loader/saver.
The way it should be saved for best load performance:
UClass +– state | +– function +– enum +– struct +– var +– const
Also considder adding a form of source code commenting, /** your text **/ would be a good format. These type of comment must precede an code block (var declaration, method, etc..) and then it will be used
20-3-2003 Well added the option to add comments to the exported HTML files, it's JavaDoc style but without the additional formatting, so comments between /** and */ are used. To comment something you have to place it above the thing you want to comment. Also fixed the parser big time, strings now have their leading and trailing " also names are supported.
Still can't figure out how to prevent the collapse\expand of the tree on a double click without breaking something else.
25-3-2003 wrote a new state saver/loader this one can handle class details so from now on class will contain details when UnCodeX is started. Everything is saved except for the comments. The state file is around 800kb for my UT2003 installation. Also added a -tags command to display the properties on startup/reuse but the window displaying needs to be improved. When you double click a property item it will open the source (at that position). Note: also look into a way to click and add the property to the editor.
26-3-2003 Improved the window placement of the Tags window, it will now also disappear when unfocused, unless you change it to a real window.
28-3-2003 Writing help files is boring.
8-4-2003 Been a while since I added something here. Currently working on a new hint window to give better feedback on the class properties. I also plan to improve the text copied to the clipboard when you select a class property. I want to add the function template when you select the function. So function Test(Pawn A) would be copied to the clipboard as: Test(Pawn) this way you would know what arguments to use. I'm also going to look into a way to add the selected property to the to the edit window you called it from (if possible).
13-4-2003 Well UnCodeX is wrapping up, not much things to fix/add. So I think I can move it up to stable soon. The only things left are support for custom output modules, also maybe syntax highlighted source code to the HTML output. Ok so I guess theres still much to add. I'll shutup for now.
29-4-2003 I've added an experimental source code preview in 065, it requires some fixing. Never worked with RichEdit before. For some reason I can't fill the content via a memory stream, only via a file on disk. Also need to figure out some other things like: ctrl+click to search selected word (requires an alternative word selector routine), hilight/focus a search result line
2-5-2003 Argh I'm going nuts, in order to get a usefull source preview I need to make sure the words are broken correctly, by default the RichEdit control breaks on a '_' and that's bad. So I had to replace the word break method. No problem there, but I can't get my work break method working. The right side is always correct, by the left side always screws up. I can't see wtf I'm doing wrong.
Mychaeel: Source code should't be word-wrapped at all to start with, in my opinion...
El Muerte TDS: it isn't, but the word break method is used for selection, e.g. if you double click a word the function is called to retreive the selection area of the word.
9-5-2003 Starting the final cleaning up and making sure the units are as solid as possible. Also started a little side project for a commandline version of the HTML Doc generation. This might be included in the final release.
10-5-2003 Well I'm going to scrap the idea of a commandline version, it's requires more effort to work around some issues than it would add more use to it. It's not even userfriendly (on a windows system).
17-5-2003 I've been messing around with some extra plugins. On of them: a plugin to create DOT files to be used with [GraphViz] is giving me headachs. When I calculate the class/package dependencies I create a new list to hold these dependencies. But for some reason I keep getting errors from the memory manager.
Another thing I working on, haven't started on the coding tho, is a plug in to create XMI files. An XMI file is a standard format to store entity relationship models in. The Ecplise envoirement has a plugin for this and also other programs support it. But I fear I will get into the same problems with this plugin as I have with the GraphViz plug in.
19-5-2003 aaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrggggggggggggggggggghhhhhhhhhhhhhhhhhh My god what a BPB, I .Free()'ed where I should have .Clear()'ed
22-5-2003 The GraphViz plugin is coming a long nicely. Still on the lookout for creating a UML ouput plugin. The problem is that XMI doesn't seem that portable. Haven't found a free UML tool that can export to XMI, AragoUML and Eclipse use XMI internally but they are not exchangeable. At this rate the GraphViz plug-in will be included with the final UnCodeX version but the XMI/UML plug-in won't.
25-5-2003 I've had it with this crap, XMI and about all UML tools are the largest piece of crap ever made. Even the IRC protocol specification is better than how all those UML tools implemented their support for the XMI standard. I've tried a couple of (semi-)free UML tools and whatever they generated/exported was not usable in any of the other tools. Copy pasting an example from the XMI specification couldn't even be read my any of the tools. Afaik Rational Rose is the only tool that might produce something usefull. Most UML tools had support for importing the native Rational Rose format, and I've been told that Rational Rose also has XMI support. Ok maybe the commercial versions of the tools I tried work ok but I can't try those because of the very high price on them. How do they expect that customers buy their software when their free/demo versions are a piece of crap.
6-6-2003 Ok, one month to prepare another release of UnCodex, yes I'm going to enter it into the contest. A few things I want to implement before that time: inline search, external/internal comment processor support (HTML output), fix those "weird" bugs
22-6-2003 Well added DDE support to UnCodeX to pass the commandline arguments to it. There's just one little problem. The Borland implication of DDE has a little bug (open connections are not closed on shutdown). I fixed that problem, was just one line. But I can't add that file to the UnCodeX source (it's not part on the no-nonsense license). So either I have to reimplement the whole DDE part myself, find a open source DDE implementation, find a workaround for the current problem or remove the DDE support.
Mychaeel: Mind if I, for the pure sake of aesthetics, rename this subpage to "Developer Journal History"?