Ticket #21: my.diff

File my.diff, 1.0 kB (added by CyberShadow, 2 years ago)

proposed patch (v2)

  • teqXML.d

    old new  
    227227    void addAttribute(T[] key, T[] value) 
    228228    { 
    229229        assert(status == Status.InTag); 
    230         writer(Const.space)(key)(Const.equals)(Const.dqm)(value)(Const.dqm); 
     230        writer(Const.space)(key)(Const.equals)(Const.dqm); 
     231        outputChecked(value); 
     232        writer(Const.dqm); 
    231233    } 
    232234     
    233235    void endElement(T[] name) 
     
    663665            start.moveTo(end); 
    664666            end.advanceTo(quote); 
    665667            T[] value = start.sliceTo(end); 
     668            // unescape the value 
     669            T[] escapedvalue = value; 
     670            foreach_reverse(int i,T c;value) 
     671                if(c=='&') 
     672                { 
     673                    int ampend = Text.locate(value, ';', i); 
     674                    if(ampend<value.length) 
     675                        escapedvalue = value[0..i] ~ entities[value[i+1..ampend]] ~ escapedvalue[ampend+1..$]; 
     676                } 
    666677 
    667             myHandler.addAttribute(nameSCpy, value); 
     678            myHandler.addAttribute(nameSCpy, escapedvalue); 
    668679            end++; 
    669680        } 
    670681        start.moveTo(end);