Sylvester writes: "The spec says, the first element to return a non-empty result is used for substitution. In this case, this is the editor macro which actually prints the editor twice!"
The citeproc-ruby behaviour seems correct, I think. Shall we amend the test? I'll probably leave the citeproc-js code as it is (and call it a bug), unless this comes up as an issue in a running style. On Sat, Jan 25, 2014 at 3:05 AM, Sebastian Karcher <[email protected]> wrote: > In reverse order: > > Like Sylvester I'm confused about 3) as well and would have expected this to > produce duplicate editors (as the editor macro by itself does). > > FWIW, I just tested this in my Zotero install and it doesn't actually > produce the test result. I always get "Jane-girl Doe editor" even for books. > > Re 2.) We've been writing all styles assuming that the label node is > inherited. I assume that is an omission in the specs, I'd suggest just > adding that. > > Re 1) I'd go with your original hunch and not inherit anything that's > explicitly set in the child node. If people use macros in cs:substitute, > that's presumably precisely because they want to _prevent_ inheriting > attributes. Otherwise they could just use cs:names. Again, making this > explicit in the specs would be a good idea. > > Sebastian > > > > On Fri, Jan 24, 2014 at 10:21 AM, Sylvester Keil <[email protected]> > wrote: >> >> I have finally hit upon the issue noted by Frank below and, indeed, I >> could need a little help understanding the specification in this case. >> >> Here I am referring to test case: >> >> >> https://bitbucket.org/bdarcus/citeproc-test/src/ab136a6aa8f2/processor-tests/humans/substitute_SuppressOrdinaryVariable.txt >> >> When rendering the second item we have a book with an editor and a >> title. Because there are no translators, the editor will be rendered >> instead using the editor macro. But this macro is tricky. >> >> Since we have a book in this case, we could simplify it like this: >> >> <macro name="editor"> >> <names variable="editor"> >> <name/> >> <label prefix=" " form="short"/> >> </names> >> <names variable="editor"> >> <name/> >> <label prefix=" "/> >> </names> >> </macro> >> >> Now, this presents three questions to me: >> >> First, how should we deal with names nodes (when used as substitutions) >> that have child nodes? (If I am not mistaken this is the question to >> which Frank wanted to alert us) — I do agree that this should be stated >> explicitly in the spec. My initial approach was to not inherit anything >> from the original names node, thinking that if style authors added a >> node there specifically, it should always be used. But then I thought of >> macros and realized that it is very likely that macros could be used in >> substitutions and in this case I think it makes more sense for the >> formatting of the nodes being substituted for always taking precedence. >> I am undecided what makes more sense here, and just wanted to know what >> the consesus is on this point? >> >> The second question I have is about the label node. The spec says this >> in the Substitute section: >> >> "A shorthand version of cs:names without child elements, which inherits >> the attributes values set on the cs:name and cs:et-al child elements of >> the original cs:names element, may also be used." >> >> Does that mean that the label node is never inherited? >> >> But there is a third issue with this test case. When rendering Item-2 , >> which is a book, the editor macro looks like the one I printed above >> (unfolding the choose node and editor-short-label macro). >> >> citeproc-ruby renders this as "John-boy Doe ed.John-boy Doe editor." and >> I can't say that I find any fault there. Here is what the spec says >> about substitution and subsequent suppression: >> >> "If cs:substitute contains multiple child elements, the first element to >> return a non-empty result is used for substitution. Substituted >> variables are suppressed in the rest of the output to >> prevent duplication." >> >> I have implemented it this way: when rendering substitutions, I start >> rendering each child. Before the rendering starts, an observer object is >> attached to the citation item that keeps track of all variables being >> accessed. Now, if the child renders a non-empty result, this will be >> used as the substiution. At this point can I mark all variables that >> were used as suppressed (they are not deleted, but marked as suppressed, >> so that conditional tests etc. still find the values, but at the same >> time I can make sure they will not be printed again etc.). For this >> reason, the output above makes a lot of sense to me. >> >> However, the expected test result is just: "John-boy Doe ed." — but this >> does not seem right to me. The spec says, the first element to return a >> non-empty result is used for substitution. In this case, this is the >> editor macro which actually prints the editor twice! >> >> Obviously, this is a quite complicated example, so if I've made a >> mistake, please do point me to it. In any case, I would be very >> interested in your opinion on this, because as it stands I am reluctant >> to change the way citeproc-ruby handles this. >> >> Thanks! >> >> Sylvester >> >> >> >> >> >> >> >> On Sat, 2012-09-08 at 18:03 +0900, Frank Bennett wrote: >> > While looking into a error report from Sebastian, I found that >> > citeproc-js was not coping gracefully with nested full-form cs:names >> > nodes. >> > >> > While a cs:names node without children should inherit the labels from >> > the preceding superior cs:name node on its parent, a full-form node >> > should (I think) completely override all superior cs:label nodes. >> > >> > I suspect that other CSL implementations are likely to have cleaner >> > internals than citeproc-js, and already behave in this way; but I >> > thought I would mention it because I was a little surprised to find >> > such a fundamental error in code that has been in service for so long. >> > Here is a test that covers the issue: >> > >> > >> > http://bitbucket.org/bdarcus/citeproc-test/src/ab136a6aa8f2/processor-tests/humans/substitute_SuppressOrdinaryVariable.txt >> > >> > (If I'm wrong and other implementations are tripped up on these nested >> > structures, it might be worth mentioning the difference in behaviour >> > explicitly in the specification.) >> > >> > Frank >> > >> > >> > ------------------------------------------------------------------------------ >> > Live Security Virtual Conference >> > Exclusive live event will cover all the ways today's security and >> > threat landscape has changed and how IT managers can respond. >> > Discussions >> > will include endpoint security, mobile security and the latest in >> > malware >> > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> > _______________________________________________ >> > xbiblio-devel mailing list >> > [email protected] >> > https://lists.sourceforge.net/lists/listinfo/xbiblio-devel >> >> >> >> ------------------------------------------------------------------------------ >> CenturyLink Cloud: The Leader in Enterprise Cloud Services. >> Learn Why More Businesses Are Choosing CenturyLink Cloud For >> Critical Workloads, Development Environments & Everything In Between. >> Get a Quote or Start a Free Trial Today. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk >> >> _______________________________________________ >> xbiblio-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/xbiblio-devel >> > > > > -- > Sebastian Karcher > Ph.D. Candidate > Department of Political Science > Northwestern University > > ------------------------------------------------------------------------------ > CenturyLink Cloud: The Leader in Enterprise Cloud Services. > Learn Why More Businesses Are Choosing CenturyLink Cloud For > Critical Workloads, Development Environments & Everything In Between. > Get a Quote or Start a Free Trial Today. > http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk > _______________________________________________ > xbiblio-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/xbiblio-devel > ------------------------------------------------------------------------------ CenturyLink Cloud: The Leader in Enterprise Cloud Services. Learn Why More Businesses Are Choosing CenturyLink Cloud For Critical Workloads, Development Environments & Everything In Between. Get a Quote or Start a Free Trial Today. http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk _______________________________________________ xbiblio-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/xbiblio-devel
