Re: [Audacity-devel] XML code checked in
A free multi-track audio editor and recorder
Brought to you by:
aosiniao
From: Brian G. <bm...@ya...> - 2002-04-30 20:59:49
|
Ok, I will make a project file. Brian G. --- Dominic Mazzoni <do...@mi...> wrote: > Audacity now stores its project files in XML. > > To use the new code, be sure to run "cvs update -d" > so that you get new directories (lib-src/expat, to > be specific). You will need to run configure again, > as well. > > I'd appreciate it if someone could create a Windows > project file for expat. It should be extremely > simple: the only C files to include are: > > xmlparse/xmlparse.c > xmltok/xmlrole.c > xmltok/xmltok.c > > Do not include any of the other ".c" files in the > project - they're actually included by the other > C files. > > You'll also have to add one source file from the > "xml/" directory to audacity.dsp, and hopefully > everything else will just work. > > On to the implementation details: > > I made some decisions to keep the code as simple as > possible for now, while allowing for the possibility > of expanding its functionality later. > > * I'm only using XML tags, no characters. In other > words, all markup, no text. For example, instead > of marking up a label track like this: > > <labeltrack> > <label> > <time>0.5</time> > <title>red</title> > </label> > <label> > <time>2.3</time> > <title>green</title> > </label> > </labeltrack> > > ...instead I mark it up like this: > > <labeltrack> > <label time=0.5 title="red" /> > <label time=2.3 title="green" /> > </labeltrack> > > I find that the latter form is not only shorter, > but also much simpler to parse. Thus many tags > have required attributes. > > Audacity will not break if it is given character > data (i.e. text outside of tags) - it will just skip > over it for now. If we choose to use character > data later, we'll still be able to read old-format > files, too. > > * I'm using expat 1.2 as the XML parser. It's good, > clean, cross-platform C code. There are newer > versions of expat under development, but version 1.2 > is supposed to be stable, and I didn't see any > reason not to use it. > > expat is an event-based parser. In other words, it > uses very few of its own data structures, and we can > load very large XML files as they're parsed, rather > than having to wait for the whole file to be read in > first. > > * There's no XML generator. I'm just passing a FILE * > down the tree, and each class writes valid XML tags > to the file, complete with indentation. > > Later on, we may wish to use an XML generator class. > It may make it a lot easier to support Unicode > strings, for example. > > * The bridge between Audacity and expat is the class > XMLFileReader, in src/xml/XMLFileReader.{cpp,h}. > > When a project wants to read itself from an XML file, > it constructs an XMLFileReader and passes itself as > the tag handler. The XMLFileReader then parses the > file, calling the project back when it gets the > outermost tag. When the XMLFileReader gets a child > tag, it asks the project to give it a class which can > parse the child tag, and it keeps a stack of the > handlers as it goes. > > If that wasn't clear, try looking at the code - it's > not that long. > > * Basically, if a class wants to be able to load/save > from an XML file, it just needs to inherit from > XMLTagHandler (also in src/xml) and implement the > following three methods: > > virtual bool HandleXMLTag(const char *tag, const char **attrs); > virtual XMLTagHandler *HandleXMLChild(const char *tag); > virtual void WriteXML(int depth, FILE *fp); > > The methods are commented in src/xml/XMLTagHandler.h, > so read that header file for details. > > Note that a class can return itself in HandleXMLChild. > This makes the code cleaner sometimes, by letting a > class handle parsing its children. > > The only thing left to do is load/save Envelopes, I > left that out for now. Be sure to let me know if you > find any problems. > > Importing the old project format will be a future > task, as well. > > - Dominic > > > _______________________________________________ > Audacity-devel mailing list > Aud...@li... > https://lists.sourceforge.net/lists/listinfo/audacity-devel __________________________________________________ Do You Yahoo!? Yahoo! Tax Center - online filing with TurboTax http://taxes.yahoo.com/ |