Juris-M / zotero

Juris-M is a variant of the free and friendly Zotero research platform, with support for legal and multilingual materials.
https://juris-m.github.io
Other
77 stars 12 forks source link

Parallel citations eliminating any printable trace of an item #77

Closed georgd closed 4 years ago

georgd commented 4 years ago

German language and specifically Austrian legal citations are probably even shorter than many others: for a legal case, the court abbreviation and the docket number are in some situations regarded as sufficient, titles or parties are generally not required. As a consequence, in styles that require a bibliography, parallel citations easily result in items without a printable form in the citation notes, as the reporters and commenters are only given in the bibliography.

E.g.: Decision of court "OGH", decided on 1998-02-12 with docket no. 2 Ob 328/97t; officially reported in SZ v.71, no. 21, and reported in journal JBL v. 1999, p. 54, commented by Karollus, as well as in journal ecolex, v. 1998, p. 692, commented by Wilhelm:

Bibliography: OGH 12.02.1998, 2 Ob 328/97t = SZ 71/21 = JBl 1999, 54 (<i>Karollus</i>) = ecolex 1998, 692 (<i>Wilhelm</i>). Note: OGH 2 Ob 328/97t.

Test case

(current output for first citation: OGH 2 Ob 328/97t = [CSL STYLE ERROR: reference with no printed form.] = [CSL STYLE ERROR: reference with no printed form.].)

>>===== MODE =====>>
all
<<===== MODE =====<<

>>===== KEYS =====>>
[
  "ITEM-1",
  "ITEM-2",
  "ITEM-3"
]
<<===== KEYS =====<<

>>===== DESCRIPTION =====>>
AT Case with parallel citations
<<===== DESCRIPTION =====<<

>>===== RESULT =====>>
FIRST
  OGH 2 Ob 328/97t.
BIBLIOGRAPHY
<div class="csl-bib-body">
  <div class="csl-entry">OGH 12.02.1998, 2 Ob 328/97t = SZ 71/21 = JBl 1999, 54 (<i>Karollus</i>) = ecolex 1998, 692 (<i>Wilhelm</i>).</div>
</div>
<<===== RESULT =====<<

>>===== INPUT =====>>
[
  {
    "id": "ITEM-1",
    "type": "legal_case",
    "container-title": "SZ",
    "volume": "71/21",
    "authority": "ogh",
    "number": "2 Ob 328/97t",
    "issued": {
      "raw": "1998-02-12"
    },
    "note": "",
    "multi": {
      "main": {},
      "_keys": {}
    },
    "jurisdiction": "at",
    "seeAlso": [
      "ITEM-2",
      "ITEM-3"
    ]
  },
  {
    "id": "ITEM-2",
    "type": "legal_case",
    "commenter": [
      {
        "literal": "Karollus"
      }
    ],
    "container-title": "JBl",
    "authority": "ogh",
    "number": "2 Ob 328/97t",
    "page": "54",
    "issued": {
      "raw": "1998-02-12"
    },
    "note": "",
    "multi": {
      "main": {},
      "_keys": {}
    },
    "jurisdiction": "at",
    "publication-date": {
      "month": 0,
      "date-parts": [
        [
          1999
        ]
      ]
    },
    "seeAlso": [
      "ITEM-1",
      "ITEM-3"
    ]
  },
  {
    "id": "ITEM-3",
    "type": "legal_case",
    "commenter": [
      {
        "literal": "Wilhelm"
      }
    ],
    "container-title": "ecolex",
    "authority": "ogh",
    "number": "2 Ob 328/97t",
    "page": "692",
    "issued": {
      "raw": "1998-02-12"
    },
    "note": "",
    "multi": {
      "main": {},
      "_keys": {}
    },
    "jurisdiction": "at",
    "publication-date": {
      "month": 0,
      "date-parts": [
        [
          1998
        ]
      ]
    },
    "seeAlso": [
      "ITEM-1",
      "ITEM-2"
    ]
  }
]
<<===== INPUT =====<<
fbennett commented 4 years ago

(Assuming this was due to a revision of the attributes controlling parallel rendering.)

georgd commented 4 years ago

Sorry if I explained badly. This is a requirement that's currently not achievable: the desired output is that only the first citation has a printed form, like demonstrated in the test. The current output returns the warning about the missing printed form, which should be suppressed in this very case.

fbennett commented 4 years ago

Ah, I understand. A citation cannot be suppressed completely, and that's by design. Otherwise, there would be no handle in the text to open it for editing. At first glance, at least, I don't see any easy solutions here.

georgd commented 4 years ago

Ah, I understand. A citation cannot be suppressed completely, and that's by design. Otherwise, there would be no handle in the text to open it for editing.

It’s a good thing to prevent citation suppression. But in the case of parallel citations there is a handle to the citation. So, an exception would make sense.

At first glance, at least, I don't see any easy solutions here.

I thought so. Sadly, I don’t even see a workaround.

Could you, please, reopen this issue? I’m not allowed to do so.

fbennett commented 4 years ago

Is there a style module that can be used to run the test?

fbennett commented 4 years ago

It’s a good thing to prevent citation suppression. But in the case of parallel citations there is a handle to the citation. So, an exception would make sense.

That's a very sound point. If the warning is limited to the first citation in a multi-cite citation, it works as you expect, it will still protect against invisible citations, and it will leave a handle in the document through which the citation can be opened. Making this change for general use in the processor should be safe, so I'm committing it for the next release. Thanks for thinking it through.

One question: in these cases, will users cite the case with a variety of parallel references? I'm not quite sure what happens in the bibliography when cites A, B & C are set in the first reference (say), and A, D & E in the second. Or when A, B & C are referenced in the first, and only A in the second. Or (aiyeee) only B in the second. That's not a bug-worry specific to this use case, but a general thing to consider, check, and maybe debug with respect to parallels.

If you have a module for Austria that produces these results, and the forms are in common use, feel free to file a pull request against juris-at.csl.

georgd commented 4 years ago

Is there a style module that can be used to run the test?

This is what I’m testing on: https://github.com/georgd/style-modules/blob/master/juris-at-LegCit.csl

It’s a good thing to prevent citation suppression. But in the case of parallel citations there is a handle to the citation. So, an exception would make sense.

That's a very sound point. If the warning is limited to the first citation in a multi-cite citation, it works as you expect, it will still protect against invisible citations, and it will leave a handle in the document through which the citation can be opened. Making this change for general use in the processor should be safe, so I'm committing it for the next release. Thanks for thinking it through.

You’re right. I was about to suggest changing the check for parallel citations only but in fact it is safe for multi-cite citations in general.

One question: in these cases, will users cite the case with a variety of parallel references? I'm not quite sure what happens in the bibliography when cites A, B & C are set in the first reference (say), and A, D & E in the second. Or when A, B & C are referenced in the first, and only A in the second. Or (aiyeee) only B in the second. That's not a bug-worry specific to this use case, but a general thing to consider, check, and maybe debug with respect to parallels.

In general, the first citation should list all parallel references. At least, I was told so. Subsequent citations, however, might cite only one single reference out of them, e.g. highlighting a single commenter’s opinion (another tricky thing is, that in such a case, one of the styles recommends formatting it like a journal article, you might stumble over that if you do further tests with the linked style module). So, indeed, the case of first citation = A, B, C, and D and second citation = B should be safely handled when building the bibliography (I remember having seen weird results in the past but have to re-test).

If you have a module for Austria that produces these results, and the forms are in common use, feel free to file a pull request against juris-at.csl.

I’m still working on the style-specific module. When that’s done, I’ll do the general one which needs to consider its implementation with jurism-styles in general.

georgd commented 4 years ago

I happily saw your development on citeproc-js and tested it with citeproc-test-runner. One little issue is left, the final delimiter is duplicated. So, instead of OGH 2 Ob 328/97t., I get OGH 2 Ob 328/97t.. in the above test.

fbennett commented 4 years ago

Hmm. At that point in processing, the structures of the style have been lost, and it's pretty much a list of strings. I'll look into it though, and get it fixed.

On Monday, September 14, 2020, Georg Mayr-Duffner notifications@github.com wrote:

I happily saw your development on citeproc-js and tested it with citeproc-test-runner. One little issue is left, the final delimiter is duplicated. So, instead of OGH 2 Ob 328/97t., I get OGH 2 Ob 328/97t.. in the above test.

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/Juris-M/zotero/issues/77#issuecomment-692057651, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAASMSQXVCLRWRTZQ3KHJ4TSFYMANANCNFSM4QGTOUZQ .

fbennett commented 4 years ago

Actually ... one of the tests I ran before the release does something similar, and does not throw duplicate punctuation. What parent style was used?

georgd commented 4 years ago

I’m testing with https://github.com/georgd/jm-styles/blob/master/jm-leg-cit-rechtsquellenverzeichnis-literaturverzeichnis.csl which I’m working on. I‘ve reduced it to the minimum required to reproduce this issue with this parent style:

<?xml version="1.0" encoding="utf-8"?>
<style xmlns="http://purl.org/net/xbiblio/csl" version="1.1mlz1" class="note" default-locale="de-AT">
  <info>
    <title>JM test parent</title>
    <id>https://juris-m.github.io/styles/jm-test-parent</id>
    <link href="https://juris-m.github.io/styles/jm-test-parent" rel="self"/>
    <link href="https://juris-m.github.io/styles/jm-test-parent" rel="documentation"/>
    <category citation-format="note"/>
    <updated>2020-09-14T23:10:11+02:00</updated>
    <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
  </info>
  <locale xmlns="http://purl.org/net/xbiblio/csl" xml:lang="de">
    <style-options jurisdiction-preference="LegCit de"/>
  </locale>
  <!-- Juris-M scaffolding -->
  <macro name="juris-title">
    <text value=""/>
  </macro>
  <macro name="juris-main">
    <text value=""/>
  </macro>
  <macro name="juris-tail">
    <text value=""/>
  </macro>
  <macro name="juris-main-short">
    <text value=""/>
  </macro>

  <macro name="jurism">
    <choose>
      <if context="citation">
        <text macro="juris-main-short"/>
      </if>
      <else>
        <group delimiter=" = ">
          <group delimiter=" ">
            <text macro="juris-main"/>
            <text macro="juris-title"/>
          </group>
          <text macro="juris-tail"/>
        </group>
      </else>
    </choose>
  </macro>
  <citation>
    <layout suffix="." delimiter="; ">
      <text macro="jurism"/>
    </layout>
  </citation>
  <bibliography>
    <layout suffix=".">
      <text macro="jurism"/>
    </layout>
  </bibliography>
</style>
georgd commented 4 years ago

BTW, could this be related with https://github.com/Juris-M/citeproc-js/issues/148? The above test will show that problem as well.

fbennett commented 4 years ago

The two bugs are unrelated, it turns out. I have a fix for the first, but I'll need to turn to other work this evening, before pushing the fix. The second bug (the discrepancy between citation and bib joins) seems to arise b/c the code for parallel joins in cs:citation and cs:bibliography is completely separate, and I just hadn't implemented parallel-delimiter-override in the latter. At least that's what I'll assume until I'm able to get back to it (with luck in a couple of days).

Looking at the jurism scaffolding macro in the sample, you might want to reconsider how that's laid out before getting further into the work. The scaffolding is shared among jurisdictions, and it's meant to be agnostic. If a common law reference is run through the macro as it stands, the case name would be placed in the middle of the citation, which would not be right. (In retrospect, it would have been better to also name the juris-title macro for its position and role, rather than giving it that semantic name.) The simple solution for Austrian cites would be to push all of your logic into juris-main and juris-main-short (if pinpoints come at the end), or juris-main/juris-main-short and juris-tail/juris-tail-short (if pinpoints fall mid-cite).

georgd commented 4 years ago

Looking at the jurism scaffolding macro in the sample, you might want to reconsider how that's laid out before getting further into the work.

It’s almost done (except for the things that are impossible at the moment...) but I will redo it (shouldn’t be too much work as it mostly looks like simply moving blocks of code around). We had a brief discussion on this but haven’t got too far into it, a year ago.

The scaffolding is shared among jurisdictions, and it's meant to be agnostic. If a common law reference is run through the macro as it stands, the case name would be placed in the middle of the citation, which would not be right. (In retrospect, it would have been better to also name the juris-title macro for its position and role, rather than giving it that semantic name.) The simple solution for Austrian cites would be to push all of your logic into juris-main and juris-main-short (if pinpoints come at the end), or juris-main/juris-main-short and juris-tail/juris-tail-short (if pinpoints fall mid-cite).

I considered that already but having the pinpoint in the style rather than in the module poses a problem here: in a legal case, the pinpoint in a published case is put in parentheses at the end: OGH 8 Ob 106/15v = JBl 2016, 41 (42f) -> that would be fine. But, when there’s a commenter, the commenter’s name will follow the pinpoint inside the parentheses: OGH 8 Ob 106/15v = JBl 2016, 41 (42f <i>Schauer</i>).

N.B.: there‘s also the pinpoint at the beginning of the citation. So everything would go into juris-tail/juris-tail-short.

fbennett commented 4 years ago

The juris-locator macro in the module can provide the parens and commenter. I'm not sure what is meant by a pinpoint at the beginning of the citation. Is this the structure of the citation immediately above?

georgd commented 4 years ago

The juris-locator macro in the module can provide the parens and commenter.

OK. I’ve just pushed the new scaffolding :) in the style as well as in the eu.in-LegCit and at-LegCit style modules. I haven’t checked the pinpoints for legal case yet.

I'm not sure what is meant by a pinpoint at the beginning of the citation. Is this the structure of the citation immediately above?

Sorry for being not clear, again. For statutes it’s common practice to set the pinpoint at the beginning. So legislation and regulation are completely contained in juris-tail or juris-tail-short, in order to get this output:

§ 7b IVF-Fonds-Gesetz BGBl I 180/1999 idF BGBl I 3/2010

fbennett commented 4 years ago

Ah, right. Yes, so for that type the cite would be provided by juris-tail/juris-tail-short. Understood.

georgd commented 4 years ago

Looking at the jurism scaffolding macro in the sample, you might want to reconsider how that's laid out before getting further into the work. The scaffolding is shared among jurisdictions, and it's meant to be agnostic.

I got stuck there some days ago and I can’t find a way to get that right: OGH 12.04.2011, 4 Ob 8/11x = wobl 2010/35, 55 (57 <i>Guntter</i>). where (57 <i>Guntter</i>) is juris-locator. At the same time, this should be possible too: Permanent Court of Arbitration, P.C.I.J. 45, 123., where 123 is the locator.

This boils down, as I see it, to no comma between a numeral and a parenthesis vs. a comma between two subsequent numerals. I think, the crucial point is the prefix parenthesis – if that would make comma-safe false, it would be fine.

I’m currently experimenting with something about this (more or less indigobook scaffolding, here, I removed pieces that are irrelevant for demonstration).

<group delimiter=" ">
  <group delimiter=", ">
    <text macro="juris-title-short"/>
    <text macro="juris-main-short"/>
    <choose>
      <if match="none" type="regulation legislation legal_case bill">
        <group require="comma-safe">
          <text macro="juris-locator"/>
        </group>
      </if>
    </choose>
  </group>
  <choose>
    <if type="regulation legislation legal_case bill">
      <text macro="juris-locator"/>
    </if>
    <else>
      <group reject="comma-safe">
        <text macro="juris-locator"/>
      </group>
    </else>
  </choose>
  <text macro="juris-tail-short"/>
</group>
fbennett commented 4 years ago

Working through the logic of comma-safe could not have been easy. Indeed it should return false there, I'll see what I can do.

georgd commented 4 years ago

I just scratched on the surface, I fear, by only reading through the docs and not looking at the source code (although I’m not sure, I’d understand it). But I think, I got it now, except for the empty-label-no-decor thing. How would I get a

placeholder (%s) as a term with form="static"

I couldn’t find either %s nor form="static" anywhere in the docs.

fbennett commented 4 years ago

It should work to set a locale term with form "static," with the content as "(%s)". You can then set a group with the label first and the number second. The label should merge with the number to render (123). That's from memory, but I think that's right. That might not be the effect you're after though---it will render "1, 2" as "(1), (2)". For one set of parens with a list of locators, you'll just want ordinary affixes on the group.

georgd commented 4 years ago

Working through the logic of comma-safe could not have been easy. Indeed it should return false there, I'll see what I can do.

That very delimiter between juris-main and juris-locator is really tricky. I’m really trying hard to stay compatible with existing style modules.

Here, the comma-safeness looks a bit different from the existing test:

number parenthesis > not comma safe (probably implemented but masked by parenthesis in affix) parenthesis number > not comma safe (idem) number letter (and most other non-numeric symbols) > not comma safe

Do you think, you could implement this somehow? Then I could put the parentheses in affixes in the module and adopt your scaffolding with almost no change.

fbennett commented 4 years ago

Can you provide tests or examples of planned input and desired output? (No need for CSL styling.) I'm not sure exactly what you mean by "number parenthesis," "parenthesis number," and "number letter."

georgd commented 4 years ago

Sorry, this was really badly formulated. They were meant as sequences of glyph types as seen by require="comma-safe": number, followed by opening parenthesis, closing parenthesis followed by number and a number followed by a letter.

The example for number, followed by opening parenthesis (first w/ locator) and for number, followed by letter (first w/ label):

>>===== MODE =====>>
all
<<===== MODE =====<<

>>===== KEYS =====>>
[
  "S359ICNF",
  "ZLGU2JBQ"
]
<<===== KEYS =====<<

>>===== DESCRIPTION =====>>
Test no-repeat court name
<<===== DESCRIPTION =====<<

>>===== RESULT =====>>
FIRST
  OGH 4 Ob 8/11x; 6 Ob 24/11i.
FIRST w/LOCATOR
  OGH 4 Ob 8/11x = wobl 2010, 55 (123 <i>Guntter</i>); 6 Ob 24/11i.
FIRST w/LABEL
  OGH 4 Ob 8/11x = wobl 2010, 55 (123 <i>Guntter</i>); 6 Ob 24/11i.
SUBSEQUENT
  OGH 4 Ob 8/11x; 6 Ob 24/11i.
SUBSEQUENT w/LOCATOR
  <i>Guntter</i>, wobl 2010, 55 (123); 6 Ob 24/11i.
BIBLIOGRAPHY
<div class="csl-bib-body">
  <div class="csl-entry">OGH 11.09.2012, 6 Ob 24/11i [„AGB und Unterlassungserklärung“].</div>
  <div class="csl-entry">OGH 12.04.2011, 4 Ob 8/11x = wobl 2010/35, 55 (<i>Guntter</i>).</div>
</div>
<<===== RESULT =====<<

>>===== INPUT =====>>
[
  {
    "id": "S359ICNF",
    "type": "legal_case",
    "commenter": [
      {
        "family": "Guntter"
      }
    ],
    "container-title": "wobl",
    "volume": "2010",
    "issue": "35",
    "authority": "ogh",
    "number": "4 Ob 8/11x",
    "page": "55",
    "issued": {
      "date-parts": [
        [
          2011,
          4,
          12
        ]
      ]
    },
    "note": "EF-Z 2011/85, 138",
    "multi": {
      "main": {},
      "_keys": {}
    },
    "jurisdiction": "at"
  },
  {
    "id": "ZLGU2JBQ",
    "type": "legal_case",
    "title": "„AGB und Unterlassungserklärung“",
    "authority": "ogh",
    "number": "6 Ob 24/11i",
    "issued": {
      "date-parts": [
        [
          2012,
          9,
          11
        ]
      ]
    },
    "note": "",
    "multi": {
      "main": {},
      "_keys": {}
    },
    "jurisdiction": "at",
    "genre": "verst Senat"
  }
]
<<===== INPUT =====<<

Closing parenthesis followed by a numeric locator:

>>===== MODE =====>>
all
<<===== MODE =====<<

>>===== KEYS =====>>
[
  "P5SBRNE6"
]
<<===== KEYS =====<<

>>===== DESCRIPTION =====>>
EuGH
<<===== DESCRIPTION =====<<

>>===== RESULT =====>>
FIRST
  EuGH Rs C-139/11 (Moré/KLM).
FIRST w/LOCATOR
  EuGH Rs C-139/11 (Moré/KLM) 123.
FIRST w/LABEL
  EuGH Rs C-139/11 (Moré/KLM) Abs 123.
SUBSEQUENT
  EuGH Rs C-139/11 (Moré/KLM).
SUBSEQUENT w/LOCATOR
  EuGH Rs C-139/11 (Moré/KLM) 123.
BIBLIOGRAPHY
<div class="csl-bib-body">
  <div class="csl-entry">EuGH 22.11.2012 Rs C-139/11 (Moré/KLM).</div>
</div>
<<===== RESULT =====<<

>>===== INPUT =====>>
[
  {
    "type": "legal_case",
    "title": "Moré/KLM",
    "authority": "ecj",
    "number": "Rs C-139/11",
    "issued": {
      "date-parts": [
        [
          2012,
          11,
          22
        ]
      ]
    },
    "note": "",
    "multi": {
      "main": {},
      "_keys": {}
    },
    "jurisdiction": "eu.int:cjeu"
  }
]
<<===== INPUT =====<<

Additionally: The sequence Superscript numeral – numeral/letter/... should test false with require="comma-safe" (superscript numerals are used for edition numbers):

>>===== MODE =====>>
all
<<===== MODE =====<<

>>===== KEYS =====>>
[
  "AS4YSI86"
]
<<===== KEYS =====<<

>>===== DESCRIPTION =====>>
Monograph/mult. authors/edition/no short title giv
<<===== DESCRIPTION =====<<

>>===== RESULT =====>>
FIRST
  <i>Gaul ea</i>, Zwangsvollstreckungsrecht<sup>12</sup>.
FIRST w/LOCATOR
  <i>Gaul ea</i>, Zwangsvollstreckungsrecht<sup>12</sup> 123.
FIRST w/LABEL
  <i>Gaul ea</i>, Zwangsvollstreckungsrecht<sup>12</sup> Abs 123.
SUBSEQUENT
  <i>Gaul ea</i>, Zwangsvollstreckungsrecht<sup>12</sup>.
SUBSEQUENT w/LOCATOR
  <i>Gaul ea</i>, Zwangsvollstreckungsrecht<sup>12</sup> 123.
BIBLIOGRAPHY
<div class="csl-bib-body">
  <div class="csl-entry"><i>Gaul/Schilken/Becker-Eberhard</i>, Zwangsvollstreckungsrecht<sup>12</sup> (2010).</div>
</div>
<<===== RESULT =====<<

>>===== INPUT =====>>
[
  {
    "type": "book",
    "title": "Zwangsvollstreckungsrecht",
    "author": [
      {
        "family": "Gaul"
      },
      {
        "family": "Schilken"
      },
      {
        "family": "Becker-Eberhard"
      }
    ],
    "edition": "12",
    "issued": {
      "raw": "2010"
    },
    "language": "de",
    "multi": {
      "main": {},
      "_keys": {}
    }
  }
]
<<===== INPUT =====<<
fbennett commented 4 years ago

Great, thanks. If we start with the first example, there are two input items, but the expected result for the first reference has just one item for FIRST:

OGH 4 Ob 8/11x.

... and the actual output that I get (with and old copy of the Austria module that does not make use of no-repeat) shows both references:

 OGH 4 Ob 8/11x; OGH 6 Ob 24/11i.

I guess I will indeed need access to the CSL that this is testing. The FIRST w/LOCATOR shows a citation with totally different details for the first item in the pair, which doesn't seem right:

<i>Guntter</i>, wobl 2010, 55 (123); 6 Ob 24/11i.

For what it's worth, the locator seems to be rendering correctly, but this is with an earlier version of the LegCit style, so maybe it's not exercising comma-safe.

Anyway, if you can post the first test with the full expected result and the CSL for main style and module, I'll take a look.

georgd commented 4 years ago

Great, thanks. If we start with the first example, there are two input items, but the expected result for the first reference has just one item for FIRST:

OGH 4 Ob 8/11x.

... and the actual output that I get (with and old copy of the Austria module that does not make use of no-repeat) shows both references:

 OGH 4 Ob 8/11x; OGH 6 Ob 24/11i.

I guess I will indeed need access to the CSL that this is testing.

Right. I updated the style and the module in my forks. And I updated this test case in my posting, above.

The FIRST w/LOCATOR shows a citation with totally different details for the first item in the pair, which doesn't seem right:

<i>Guntter</i>, wobl 2010, 55 (123); 6 Ob 24/11i.

Well, the idea behind this is that this is a case published in a journal and if with a locator in a short citation (or subsequent if no bibliography is given) it would ideally be cited like a journal article. I’ll eventually remove this formatting, because

For what it's worth, the locator seems to be rendering correctly, but this is with an earlier version of the LegCit style, so maybe it's not exercising comma-safe.

Anyway, if you can post the first test with the full expected result and the CSL for main style and module, I'll take a look.

See https://github.com/georgd/style-modules/blob/master/juris-at-LegCit.csl and https://github.com/georgd/jm-styles/blob/master/jm-leg-cit-rechtsquellenverzeichnis-literaturverzeichnis.csl

Once this comma-safe issue is solved, I feel more or less ready to finalize the leg cit styles.

fbennett commented 4 years ago

I've pushed a 1.4.17 release of the processor that should come close to working correctly. The new processor is bundled into an update to the test runner, so you can either pull changes to the citeproc-js repo and run from there, or just update the test runner.