Version history: 1.0b6 29 August 2003 * Fixed a bug, introduced in 1.0b5, that would cause Yonk to crash on startup if it did not already have a Preferences file. * Fixed a bug where the Object Editor would not save changes to an object's class. * Fixed a bug where editing an object property would sometimes create a duplicate of the property instead of changing it. * Fixed a crash that occurred when dragging declarations from one source file to another, or when pasting them from the Clipboard. * Implemented the "Compiler Flags" user preference. As of today Yonk doesn't communicate with the Inform compiler (and it won't until after version 1.0), so setting this preference will not have any effect right now. * Removed the non-working "Cancel" button from the window that displays when reading an Inform source file, and fixed the problem where canceling with Esc or Command-Period would leave behind an editor window with an incomplete source file. * Fixed a problem with "template.inf" briefly appearing as the title of a new source editor window. * Fixed problems with resizing the "New version available" dialog, and with responding to the user quitting the application while the "New version available" dialog was open. Known problems in this release: * The "Window" menu has been temporarily removed, due to a bug in the development environment I'm using to write Yonk. I hope to restore this feature before the final release. * Some of the preferences are not yet implemented. * Has not been scrubbed for memory leaks; save your work often. * Yonk may have trouble with Inform source files that include other (non-library) source files. Specifically, it will have trouble with attribute and class declarations in an included file, if objects in the main source file rely on them. * Still several dependencies on the standard Inform libraries. Yonk relies on hard-coded lists of attributes and compass directions instead of reading them from the libraries. It also does smart things with newly minted declarations and their relative positions, but only if your libraries are named Parser, VerbLib and Grammar. * Yonk's file-reading routines are probably not as bulletproof as they could be. If you find an input file that crashes Yonk, or that Yonk fails to read correctly, please let me know. ----------------------------------------------------------------------- 1.0b5 26 July 2003 * Fixed a problem where the Help menu's "Send Feedback..." command would display the "Yonk is about to crash" message, and quit after collecting the feedback. * Implemented the "List Colors" user preference. You can now set the colors of declaration types displayed in the Source Editor. * The "Default Parser Language" preference now defaults to English. This preference doesn't actually do anything (yet). * Fixed a bug where automatic version checking was always enabled, regardless of the preference setting, and where the preference checkbox was incorrectly shown as false. * Fixed a problem where changes made on the Object Editor's "Exits" tab did not create, edit, or delete the corresponding entry in the Object Editor's Properties list, which in turn meant the changes were not saved when closing the window. Also fixed a bug where the Undo and Redo commands were not updating the Exits tab. * Fixed the About box's program description. * Added the Command-comma menu shortcut for the Preferences. Some preference fields now support undo and redo. * Partially restored the Map Viewer's "live scrolling" effect. * The Preferences window toolbar now has a unique icon for each tab, instead of re-using the application icon. The "new" icons are borrowed from other (Apple) applications and are not especially well-suited to Yonk's preferences, but at least they're unique. 1.0b4 27 June 2003 * Implemented the Preferences menu and dialog. Preferences that are enabled in this beta: Fonts, version checking. * Added the Setup Wizard dialog. First-time users of 1.0b4 will be prompted for the location of the Inform compiler and library. Yonk doesn't actually do anything involving the compiler (yet!), but now it'll know where to find the compiler when that day comes. * Partially implemented a cacheing system for Inform libraries and other source files, which will eventually lead to full support for Inform files that rely on declarations contained in other Inform files. For now, cacheing is only used by the Setup Wizard. * New source windows now load their initial content from a template ("Template.inf") found in the system-level Application Support folder. You can edit this template and replace the defaults with your preferred settings. * Yonk now checks on startup to see if a newer version of Yonk is available for download. You can turn off this option in the Preferences, and can also check for new versions manually. * Yonk now prompts to save changes on a per-window basis, using a sheet dialog under MacOS X. Closing an editor window will close all "child" windows associated with that editor, and will prompt to save changes as needed. * Implemented the Help menu and a built-in feedback system. In the incredibly unlikely event that Yonk runs into a fatal bug, it will (attempt to) prompt you to e-mail the developer a bug report before crashing. You can also send feedback even when Yonk isn't crashing, by selecting the "Send Feedback..." item from the Help menu. * Renamed the "Inform" menu to the "Source" menu, in case Yonk ever supports languages other than Inform. * Fixed a problem with the Add Property and Delete Property buttons in the Object Editor. * Made the Windows menu conform with the Aqua Human Interface Guidelines (or, at least, it would if the Windows menu existed in this beta). Enabled the "minimize" button on the Map Viewer to replace the Show/Hide menu command. * Disabled the minimize button on the About box, as per the Aqua HIG. * Controls should now display in the proper font size under MacOS 9. 1.0b3 21 August 2002 * Rewrote almost the entire application. See below for highlights. * Ground-up rewrite of the hierarchical list code. The list now uses anti-aliased text under MacOS X, and is (hopefully) free of memory leaks. Made the hierarchical list source code available as a standalone project. * Ground-up rewrite of the file-reading routines. Opening and reading an Inform source file is about three times faster than before, but you can no longer edit the source file while it's loading. May have re-introduced some bugs with reading unusual Inform syntax. * Major rewrite of the internal data structures that store the Inform source code. Inform-related data is now cleanly separated from the hierarchical list data and the window management routines. * Major rewrite of the window management code. Added the Window menu, and a toggle menu for showing / hiding the Map Viewer. Added scrolling effects to the Map Viewer. * Major rewrite of the Undo code. Undo is available on a per-window basis, with unlimited levels of undo and redo per window. * Added preliminary support for reading the contents of included source files. * Made the About box, the declaration list, and the Inform editors conform to the Aqua Human Interface Guidelines. * Updated the link to the Yonk home page (again). * Set the default window sizes to work better on 800 x 600 displays. Object editors can now be resized to any arbitrary size. * Menu commands for creating a new Inform declaration or object now work when the current window is an object or declaration editor. 1.0b2 * Fixed a bug where a message box with a number would appear if the user held down the Command key while closing a source editor window. * Fixed a MacOS X 10.1 problem where text in dialogs would appear in a variety of colors. * Adjusted the size of the Object Editor window to work around a bug in MacOS X, which was causing the tabs at the bottom of the window to overlap the apply / cancel / close buttons. * Updated the link to the Yonk home page. 1.0b1 * Instead of reading a subroutine one character at a time, the file- reading routine now reads it as blocks of text delimited by special characters (e.g., [, ], !, ', ", and the DOS linefeed 0x10). This significantly speeds up file reading, since the code was previously checking for these special characters on a byte-by-byte basis. * Fixed some problems with the Edit menu being disabled incorrectly. The menu still flickers whenever the Viewer window is updated, but it returns to the correct state afterwards. * Fixed a bug in the output of class declarations that specify a number of instances, such as the Ticket(6) in Balances. * Fixed a bug reading globals or constants where there wasn't any whitespace between the name and the "=" sign. * Dragging text into the game window now creates new items based on where the text was dropped, rather than automatically inserting items at the end of the list. Unfortunately Yonk doesn't get any feedback from the OS when the OS has control of a drag, so Yonk can't highlight the "target area" of the drop when this happens.... * Fixed a bug in the hierarchical tree code that couldn't actually happen in this program. :-) (It involved the case where an item has children, but isn't allowed to have any more; I found it while cleaning up the tree code.) 1.0a1 * Fixed several problems found by reading the standard libraries. Yonk can now correctly read the three-character sequence ''', arrays that don't put spaces between the parts of the declaration (such as "Array line_ttype-->32;"), arrays that put comments between the parts of the declaration, constants that use single quotes instead of double quotes, and other rare-but-valid syntax. * Yonk now assigns its own creator code to documents it creates, opens the document when it's double-clicked in the Finder, asks if you wish to revert to a saved version, etc. * When quitting the application, Yonk should now only ask if you want to save changes one time per game, no matter how many editor windows you have open. * Fixed problems with flickering in the Viewer window while typing the name or short name of an object. * Added the About box. 1.0d4 * Added the Viewer floating window, which displays Inform source code and allows the user to "walk through" the game's map of rooms by pointing and clicking. Yonk treats doors as a special case in the Viewer window, and will determine what "exits" a door should have based on its door_dir property and the exits of surrounding rooms. (This works about 90% of the time. To get it right 100% of the time, Yonk would have to actually play the game.) * Fixed problems with object nametags not refreshing correctly when objects were dragged around in the tree (the number of "->" arrows was not being updated). * Added the ability to set and edit "Extend" directives. * Yonk now understands verb declarations that define a synonym (e.g. "Verb 'apologise' 'apologize' = 'sorry';" in the Deadline source). * If Yonk encounters an attribute it doesn't recognize when reading an object from an input file, it will silently assume that the attribute is declared in an include file, and react accordingly. (Previously Yonk treated this as a syntax error.) * Fixed a problem with reading subroutines that didn't put a space between the opening bracket and the name of the subroutine. * Fixed a problem with reading classes that had a parent class. * Added support for Cut, Copy, Paste and Clear menu items in the object tree. Yonk puts Inform source code on the clipboard. 1.0d3 * Added an "expert mode" to the object editor window, allowing the user to set attributes explicitly (i.e., there are separate toggles for light and ~light), and to set an object's class manually. This is useful when Yonk doesn't know the class of an object (because the class declaration lives in a separate include file), or when you want to explicitly set ~light on an object whose parent class doesn't have light either. * When Yonk is reading an input file and encounters a word that it doesn't recognize, it will first try to interpret that line of the input file as a directive to the compiler. If that fails (or, if the line in question contains the string "->"), Yonk will back up, treat the unknown word as the name of a class, and try to read an object. If *that* fails, then Yonk will report an error message and continue with the next line of the file. * Fixed a problem where class declarations were appearing in the list of possible exits. * Fixed a bug with reading an object that explicitly named its parent which was then followed by an object with an implicit parent (e.g., "Object photo wallet" and "Object -> airconditioning" in the I-0 source code). * Fixed a bug with reading a declaration that came between a parent object and its child object (e.g., "Place valley", "[RideSub;" and "Object -> horse" in the Balances source code). * Fixed a problem with declarations "flickering" in the object tree if/when they were made the child of another object. Yonk now waits for a final decision on whether the declaration will need to move before it redraws the object tree. This also (slightly) speeds up reading an input file, because the object tree redraws less often. * Undo is working again in the game editor window. Cleaned up the object tree code to make Undo easier to implement. 1.0d2 * Merged the internal data structures for objects and non-objects. Major changes and cleanup throughout. Removed the menu item for "Clean Up Objects", as it's no longer required, and removed the "(game objects)" psuedo-object from the object tree. * Moved the "generate Inform output" code into its own subroutine, so that it can be used in other places besides when writing a file (e.g., for creating object nametags in the hierarchical tree). * Yonk now allows a non-object to become the child of an object, if that's what it takes to preserve the declaration order. (For example, Yonk now treats "Class Candle" in the Toyshop source code as a child of Danger_Zone, so that the class declaration properly appears between "match" and "grey tin box" in the output.) * Undo commands in the game window are broken at this point. * Optimized loops (Yonk is about 10-20% faster as a result). * Yonk now defines a "room" (when listing potential exits) as any object that: Has one of the twelve compass direction properties (n_to, s_to, etc.), has a cant_go property, or has the string "room" (or "place") as part of its name, "real" short name, or the name of the object's immediate parent class. 1.0d1 * Major changes to the object tree code. The object tree is now (marginally) Appearance Manager-savvy, and has better support for drag and drop operations. Still working to plug memory leaks. * The object tree now displays all declarations, not just objects. (This is a first step toward merging the internal data structures for objects and non-objects, which is needed for Yonk to support #ifdef correctly.) Added sanity checks to prevent non-objects from being dragged into each other. * Added simple color-coding of declarations. 0.9b1 * Fixed a problem where rapidly clicking disclosure triangles in the object tree could crash the program while loading a source file. * Fixed a problem with the three-character sequence '"' incorrectly triggering Yonk's "read a quote" subroutine during a file read. This in turn revealed a bug in the reading of punctuation marks in comments within subroutines, which was also fixed. * Exit lists now include door objects as well as room objects. * Property names now auto-complete, thanks to Marc Zeedar's GrayEdit class. 0.9a3 * Tested against a variety of Inform source files from the IF-Archive. Yonk's file-reading code now treats anything it doesn't understand as an instruction to the compiler, and reads it verbatim -- this both simplifies the code and improves Yonk's success rate. * Fixed a bug in the handling of class declarations that specify a number of instances, such as the Ticket(6) in "Balances". * Fixed various bugs with handling comments inside a verb declaration, brackets in an array declaration, comments that looked like "!this" instead of "! this", etc. * Yonk's behavior now matches the Inform compiler in the situation where "Object foo" is immediately followed by "Object -> -> bar". Previously Yonk would treat this as a syntax error, but apparently the compiler silently ignores the extra "->" and makes "bar" the child of "foo". Yonk now ignores any extra "->"s in a declaration.