Hi all,

Looks like I just solved my own problem by adding "public:" just above the 
imports in red.xml.dom because I got it to work flawlessly just now :)

the dom.d file now looks like this:

module red.xml.dom;

public:

import red.xml.xmlnodelist;
import red.xml.xmlattributelist;
import red.xml.xmlnode;
import red.xml.xmldocument;
import red.xml.xmlattribute;
import red.xml.xmlelement;
import red.xml.xmltextnode;
import red.xml.xmlcomment;
import red.xml.xmlcdatasection;

EOF

And all the individual modules have the appropriate dependencies imported.

On Mar 8, 2010, at 5:56 PM, Kris Herlaar wrote:

> Hi folks,
> 
> Allow me to introduce myself, I'm Kris and new to this list and the D 
> language in general, but have well over 20 years of programming experience 
> using several other languages ranging from Wozniaks' integer basic to 
> Hejlsbergs' c#.
> 
> My first venture using D is to create a set of classes implementing XML DOM 
> using familiar syntax for people used to php or javascript and such. I was 
> able to write the basics for this in D in a few hours using a bunch of 
> classes:
> 
> - XMLDocument
> - XMLNode
> - XMLAttribute
> - XMLElement
> - XMLTextNode
> - XMLComment
> - XMLCDataSection
> - XMLNodeList
> - XMLAttributeList
> 
> All in the package "red.xml"
> 
> Being used to (and really liking!) the one-class-per-file approach, I 
> instinctively created the classes in seperate files. When attempting to 
> compile a simple test program however it quickly became totally unrealistic 
> to use the one-class-per-file approach because I had to import each and every 
> single file seperately in order to get a working build. When I moved all the 
> classes into a single module (red.xml.xmldom) it worked flawlessly but I 
> would really like to have the best of both approaches.
> 
> Is it possible to split the files up to use one class per file again, but add 
> a red.xml.xmldom module imports and exposes them somehow?
> 
> I was hoping it'd be something like the following in the red.xml.dom module:
> 
> import red.xml.xmldocument;
> import red.xml.xmlnNode;
> import red.xml.xmlattribute;
> import red.xml.xmlelement;
> import red.xml.xmltextnode;
> import red.xml.xmlcomment;
> import red.xml.xmlcdatasection;
> import red.xml.xmlnodelist;
> import red.xml.xmlattributelist;
> 
> But that doesn't seem to work (I get a whole bunch of "module ... is in 
> multiple defined" errors).
> 
> I'm compiling with the latest dmd compiler on the commandline in macos x 
> (10.6) using a commandline tool I built in php that compiles a file "main.d" 
> and adds all imported dependencies to the dmd commandline. The generated 
> commandline statement looks like this:
> 
> dmd -of/Users/kris/Developer/D/xml-tests/main -unittest 
> /Users/kris/Developer/D/xml-tests/main.d 
> /Users/kris/Developer/D/xml-tests/red/generic/linkedlist.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmlnode.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmldocument.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmlattribute.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmlattributelist.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmlelement.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmltextnode.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmlcomment.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmlcdatasection.d 
> /Users/kris/Developer/D/xml-tests/red/xml/xmlnodelist.d 
> /Users/kris/Developer/D/xml-tests/red/xml/dom.d
> 
> more readable:
> 
> dmd -ofmain -unittest main.d 
>       red/generic/linkedlist.d 
>       red/xml/xmlnode.d 
>       red/xml/xmldocument.d 
>       red/xml/xmlattribute.d
>       red/xml/xmlattributelist.d
>       red/xml/xmlelement.d
>       red/xml/xmltextnode.d
>       red/xml/xmlcomment.d
>       red/xml/xmlcdatasection.d
>       red/xml/xmlnodelist.d
>       red/xml/dom.d
> 
> I've also tried versions omitting the dom.d (same errors), and adding only 
> dom.d (lots of "identifier ... is not defined" errors), but nothing works the 
> way I'd hope and/or expect.
> 
> Is there any clean way to do this?
> 
> I can make my sourcecode available if anyone would like that (for the build 
> tool as well).
> 

Reply via email to