Skip to content
Snippets Groups Projects
Commit 8a55a15c authored by sebastien curt's avatar sebastien curt
Browse files

Deeper analysis for issue 12 -> test all sentences of unl source.

-> sentence 3 contains a reference to graph ":02". But the attribute @entry is missing for node ":02"
parent 860786e9
No related tags found
No related merge requests found
Pipeline #220 failed
...@@ -16,7 +16,7 @@ public class SubGraphReferenceNode extends GraphNode { ...@@ -16,7 +16,7 @@ public class SubGraphReferenceNode extends GraphNode {
} }
public String getNodeId() { public String getNodeId() {
return null; return referenceNumber;
} }
public String getReferenceNumber() { public String getReferenceNumber() {
......
...@@ -4,16 +4,17 @@ import fr.tetras_libre.unltools.unl.UniversalWord; ...@@ -4,16 +4,17 @@ import fr.tetras_libre.unltools.unl.UniversalWord;
import fr.tetras_libre.unltools.unl.UniversalWordNode; import fr.tetras_libre.unltools.unl.UniversalWordNode;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
public class UniversalWordNodeBuilder { public class UniversalWordNodeBuilder {
private final HashSet<String> attributes; private final LinkedHashSet<String> attributes;
private UniversalWord universalWord; private UniversalWord universalWord;
private String instanceNumber; private String instanceNumber;
private UniversalWordNodeBuilder() { private UniversalWordNodeBuilder() {
this.attributes = new HashSet<>(); this.attributes = new LinkedHashSet<>();
this.instanceNumber = ""; this.instanceNumber = "";
} }
......
...@@ -280,20 +280,446 @@ public class Issue12Unl extends AbstractFlyweightUnlArgumentProvider { ...@@ -280,20 +280,446 @@ public class Issue12Unl extends AbstractFlyweightUnlArgumentProvider {
} }
private UnlDocumentNode createSentence2() { private UnlDocumentNode createSentence2() {
return null; return UnlDocumentNodeBuilder
.createBuilder()
.withNodeType(UnlDocumentNodeType.Sentence)
.withLabel("[S:00]")
.withGraph(
gb -> gb.addGraphRelation(
grb -> grb.label("aoj")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("define")
.addTernaryTransitiveRestriction("icl", "characterize", "be", RestrictionOrientation.Right)
.addSimpleRestriction("obj", RestrictionOrientation.Right, "uw")
.addSimpleRestriction("aoj", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@entry")
.addAttribute(".@present")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("document")
.addTernaryTransitiveRestriction("icl", "writing", "thing", RestrictionOrientation.Right)
)
.addAttribute(".@def")
)
)
.addGraphRelation(
grb -> grb.label("man")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("define")
.addTernaryTransitiveRestriction("icl", "characterize", "be", RestrictionOrientation.Right)
.addSimpleRestriction("obj", RestrictionOrientation.Right, "uw")
.addSimpleRestriction("aoj", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@entry")
.addAttribute(".@present")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("primarily")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "how")
.addSimpleRestriction("equ", RestrictionOrientation.Right, "mainly")
)
)
)
.addGraphRelation(
grb -> grb.label("and")
.noReference()
.leftSubGraphNode(
lnb -> lnb.referenceNumber(":01")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("define")
.addTernaryTransitiveRestriction("icl", "characterize", "be", RestrictionOrientation.Right)
.addSimpleRestriction("obj", RestrictionOrientation.Right, "uw")
.addSimpleRestriction("aoj", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@entry")
.addAttribute(".@present")
)
)
.addGraphRelation(
grb -> grb.label("mod")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("requirement")
.addTernaryTransitiveRestriction("icl", "duty", "thing", RestrictionOrientation.Right)
)
.addAttribute(".@def")
.addAttribute(".@pl")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("operational")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "adj")
.addSimpleRestriction("com", RestrictionOrientation.Right, "operation")
)
)
)
.addGraphRelation(
grb -> grb.label("obj")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("define")
.addTernaryTransitiveRestriction("icl", "characterize", "be", RestrictionOrientation.Right)
.addSimpleRestriction("obj", RestrictionOrientation.Right, "uw")
.addSimpleRestriction("aoj", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@entry")
.addAttribute(".@present")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("requirement")
.addTernaryTransitiveRestriction("icl", "duty", "thing", RestrictionOrientation.Right)
)
.addAttribute(".@def")
.addAttribute(".@pl")
)
)
.addGraphRelation(
grb -> grb.label("man")
.reference(":01")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("contain")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "be")
.addSimpleRestriction("equ", RestrictionOrientation.Right, "comprise")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "abstract_thing")
.addSimpleRestriction("aoj", RestrictionOrientation.Right, "information")
.addSimpleRestriction("pur", RestrictionOrientation.Right, "abstract_thing")
)
.addAttribute(".@entry")
.addAttribute(".@present")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("therefore")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "how")
)
)
)
.addGraphRelation(
grb -> grb.label("man")
.reference(":01")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("term")
.addTernaryTransitiveRestriction("icl", "word", "thing", RestrictionOrientation.Right)
.addSimpleRestriction("mod", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@pl")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("only")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "how")
.addSimpleRestriction("equ", RestrictionOrientation.Right, "recently")
)
)
)
.addGraphRelation(
grb -> grb.label("qua")
.reference(":01")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("term")
.addTernaryTransitiveRestriction("icl", "word", "thing", RestrictionOrientation.Right)
.addSimpleRestriction("mod", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@pl")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("a_few")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "adj")
.addSimpleRestriction("equ", RestrictionOrientation.Right, "some")
.addSimpleRestriction("qua", RestrictionOrientation.Left, "thing")
)
)
)
.addGraphRelation(
grb -> grb.label("mod")
.reference(":01")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("term")
.addTernaryTransitiveRestriction("icl", "word", "thing", RestrictionOrientation.Right)
.addSimpleRestriction("mod", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@pl")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("technical")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "adj")
.addSimpleRestriction("ant", RestrictionOrientation.Right, "nontechnical")
)
)
)
.addGraphRelation(
grb -> grb.label("obj")
.reference(":01")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("contain")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "be")
.addSimpleRestriction("equ", RestrictionOrientation.Right, "comprise")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "abstract_thing")
.addSimpleRestriction("aoj", RestrictionOrientation.Right, "information")
.addSimpleRestriction("pur", RestrictionOrientation.Right, "abstract_thing")
)
.addAttribute(".@entry")
.addAttribute(".@present")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("term")
.addTernaryTransitiveRestriction("icl", "word", "thing", RestrictionOrientation.Right)
.addSimpleRestriction("mod", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@pl")
)
)
)
.buildUnlDocumentNode();
} }
private UnlDocumentNode createSentence3() { private UnlDocumentNode createSentence3() {
return null; return UnlDocumentNodeBuilder
.createBuilder()
.withNodeType(UnlDocumentNodeType.Sentence)
.withLabel("[S:00]")
.withGraph(
gb -> gb.addGraphRelation(
grb -> grb.label("agt")
.reference(":01")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("reason")
.addTernaryTransitiveRestriction("icl", "persuade", "do", RestrictionOrientation.Right)
.addSimpleRestriction("agt", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("gol", RestrictionOrientation.Right, "uw")
.addSimpleRestriction("rec", RestrictionOrientation.Right, "person")
)
.addAttribute(".@entry")
.addAttribute(".@present")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("consistency")
.addTernaryTransitiveRestriction("icl", "uniformity", "thing", RestrictionOrientation.Right)
.addSimpleRestriction("ant", RestrictionOrientation.Right, "inconsistency")
)
)
)
.addGraphRelation(
grb -> grb.label("qua")
.reference(":02")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("requirement")
.addTernaryTransitiveRestriction("icl", "duty", "thing", RestrictionOrientation.Right)
)
.addAttribute(".@pl")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("all")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "quantity")
.addSimpleRestriction("ant", RestrictionOrientation.Right, "some")
.addSimpleRestriction("per", RestrictionOrientation.Right, "thing")
)
)
)
.addGraphRelation(
grb -> grb.label("mod")
.reference(":02")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("requirement")
.addTernaryTransitiveRestriction("icl", "duty", "thing", RestrictionOrientation.Right)
)
.addAttribute(".@pl")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("functional")
.addSimpleRestriction("icl", RestrictionOrientation.Right, "adj")
.addSimpleRestriction("ant", RestrictionOrientation.Right, "nonfunctional")
)
)
)
.addGraphRelation(
grb -> grb.label("agt")
.reference(":02")
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("implement")
.addTernaryTransitiveRestriction("icl", "employ", "do", RestrictionOrientation.Right)
.addSimpleRestriction("agt", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@past")
.addAttribute(".@not")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("requirement")
.addTernaryTransitiveRestriction("icl", "duty", "thing", RestrictionOrientation.Right)
)
.addAttribute(".@pl")
)
)
.addGraphRelation(
grb -> grb.label("plc")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("remove")
.addTernaryTransitiveRestriction("icl", "dismiss", "do", RestrictionOrientation.Right)
.addSimpleRestriction("plf", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("agt", RestrictionOrientation.Right, "volitional_thing")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "person")
)
.addAttribute(".@entry")
.addAttribute(".@present")
.addAttribute(".@complete")
)
.rightNode(
rnb -> rnb.simpleUniversalWord(() -> "srs")
.addAttribute(".@def")
)
)
.addGraphRelation(
grb -> grb.label("obj")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("remove")
.addTernaryTransitiveRestriction("icl", "dismiss", "do", RestrictionOrientation.Right)
.addSimpleRestriction("plf", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("agt", RestrictionOrientation.Right, "volitional_thing")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "person")
)
.addAttribute(".@entry")
.addAttribute(".@present")
.addAttribute(".@complete")
)
.rightNode(
rnb -> rnb.simpleUniversalWord(() -> "\"2.3\"")
.addAttribute(".@topic")
)
)
.addGraphRelation(
grb -> grb.label("mod")
.noReference()
.leftNode(
lnb -> lnb.simpleUniversalWord(() -> "\"2.3\"")
.addAttribute(".@topic")
)
.rightNode(
rnb -> rnb.simpleUniversalWord(() -> "\".0\"")
)
)
.addGraphRelation(
grb -> grb.label("mod")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("version")
.addTernaryTransitiveRestriction("icl", "interpretation", "abstract_thing", RestrictionOrientation.Right)
.addSimpleRestriction("agt", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "uw")
)
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("this")
.addTernaryTransitiveRestriction("icl", "determiner", "adj", RestrictionOrientation.Right)
.addSimpleRestriction("mod", RestrictionOrientation.Left, "concrete_thing")
)
)
)
.addGraphRelation(
grb -> grb.label("plf")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("remove")
.addTernaryTransitiveRestriction("icl", "dismiss", "do", RestrictionOrientation.Right)
.addSimpleRestriction("plf", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("agt", RestrictionOrientation.Right, "volitional_thing")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "person")
)
.addAttribute(".@entry")
.addAttribute(".@present")
.addAttribute(".@complete")
)
.rightNode(
rnb -> rnb.universalWord(
uwb -> uwb.headWord("version")
.addTernaryTransitiveRestriction("icl", "interpretation", "abstract_thing", RestrictionOrientation.Right)
.addSimpleRestriction("agt", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "uw")
)
)
)
.addGraphRelation(
grb -> grb.label("and")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("implement")
.addTernaryTransitiveRestriction("icl", "employ", "do", RestrictionOrientation.Right)
.addSimpleRestriction("agt", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "thing")
)
.addAttribute(".@past")
.addAttribute(".@not")
)
.rightSubGraphNode(
rsgnb -> rsgnb.referenceNumber(":01")
)
)
.addGraphRelation(
grb -> grb.label("rsn")
.noReference()
.leftNode(
lnb -> lnb.universalWord(
uwb -> uwb.headWord("remove")
.addTernaryTransitiveRestriction("icl", "dismiss", "do", RestrictionOrientation.Right)
.addSimpleRestriction("plf", RestrictionOrientation.Right, "thing")
.addSimpleRestriction("agt", RestrictionOrientation.Right, "volitional_thing")
.addSimpleRestriction("obj", RestrictionOrientation.Right, "person")
)
.addAttribute(".@entry")
.addAttribute(".@present")
.addAttribute(".@complete")
)
.rightSubGraphNode(
rsgnb -> rsgnb.referenceNumber(":02")
)
)
)
.buildUnlDocumentNode();
} }
@Override @Override
protected List<UnlDocument> buildUnlDocuments() { protected List<UnlDocument> buildUnlDocuments() {
var unlDocument = new UnlDocument("[D]"); var unlDocument = new UnlDocument("[D]");
UnlDocumentNode unlDocumentNode = createSentence1(); unlDocument.add(createSentence1());
unlDocument.add(createSentence2());
unlDocument.add(unlDocumentNode); unlDocument.add(createSentence3());
return Collections.singletonList(unlDocument); return Collections.singletonList(unlDocument);
} }
......
...@@ -117,40 +117,40 @@ public class UnlSentences { ...@@ -117,40 +117,40 @@ public class UnlSentences {
"mod(train(icl>public_transport>thing),:03.@_hn-scope)\n" + "mod(train(icl>public_transport>thing),:03.@_hn-scope)\n" +
"{/unl}\n" + "{/unl}\n" +
"[/S]\n" + "[/S]\n" +
// "[S:00]\n" + "[S:00]\n" +
// "{org:en}\n" + "{org:en}\n" +
// "The document primarily defines the operational requirements and therefore contains only a few technical terms.\n" + "The document primarily defines the operational requirements and therefore contains only a few technical terms.\n" +
// "{/org}\n" + "{/org}\n" +
// "{unl}\n" + "{unl}\n" +
// "aoj(define(icl>characterize>be,obj>uw,aoj>thing).@entry.@present,document(icl>writing>thing).@def)\n" + "aoj(define(icl>characterize>be,obj>uw,aoj>thing).@entry.@present,document(icl>writing>thing).@def)\n" +
// "man(define(icl>characterize>be,obj>uw,aoj>thing).@entry.@present,primarily(icl>how,equ>mainly))\n" + "man(define(icl>characterize>be,obj>uw,aoj>thing).@entry.@present,primarily(icl>how,equ>mainly))\n" +
// "and(:01,define(icl>characterize>be,obj>uw,aoj>thing).@entry.@present)\n" + "and(:01,define(icl>characterize>be,obj>uw,aoj>thing).@entry.@present)\n" +
// "mod(requirement(icl>duty>thing).@def.@pl,operational(icl>adj,com>operation))\n" + "mod(requirement(icl>duty>thing).@def.@pl,operational(icl>adj,com>operation))\n" +
// "obj(define(icl>characterize>be,obj>uw,aoj>thing).@entry.@present,requirement(icl>duty>thing).@def.@pl)\n" + "obj(define(icl>characterize>be,obj>uw,aoj>thing).@entry.@present,requirement(icl>duty>thing).@def.@pl)\n" +
// "man:01(contain(icl>be,equ>comprise,obj>abstract_thing,aoj>information,pur>abstract_thing).@entry.@present,therefore(icl>how))\n" + "man:01(contain(icl>be,equ>comprise,obj>abstract_thing,aoj>information,pur>abstract_thing).@entry.@present,therefore(icl>how))\n" +
// "man:01(term(icl>word>thing,mod>thing).@pl,only(icl>how,equ>recently))\n" + "man:01(term(icl>word>thing,mod>thing).@pl,only(icl>how,equ>recently))\n" +
// "qua:01(term(icl>word>thing,mod>thing).@pl,a_few(icl>adj,equ>some,qua<thing))\n" + "qua:01(term(icl>word>thing,mod>thing).@pl,a_few(icl>adj,equ>some,qua<thing))\n" +
// "mod:01(term(icl>word>thing,mod>thing).@pl,technical(icl>adj,ant>nontechnical))\n" + "mod:01(term(icl>word>thing,mod>thing).@pl,technical(icl>adj,ant>nontechnical))\n" +
// "obj:01(contain(icl>be,equ>comprise,obj>abstract_thing,aoj>information,pur>abstract_thing).@entry.@present,term(icl>word>thing,mod>thing).@pl)\n" + "obj:01(contain(icl>be,equ>comprise,obj>abstract_thing,aoj>information,pur>abstract_thing).@entry.@present,term(icl>word>thing,mod>thing).@pl)\n" +
// "{/unl}\n" + "{/unl}\n" +
// "[/S]\n" + "[/S]\n" +
// "[S:00]\n" + "[S:00]\n" +
// "{org:en}\n" + "{org:en}\n" +
// "For consistency reasons, all functional requirements not implemented in the SRS 2.3.0 have been removed from this version..\n" + "For consistency reasons, all functional requirements not implemented in the SRS 2.3.0 have been removed from this version..\n" +
// "{/org}\n" + "{/org}\n" +
// "{unl}\n" + "{unl}\n" +
// "agt:01(reason(icl>persuade>do,agt>thing,gol>uw,rec>person).@entry.@present,consistency(icl>uniformity>thing,ant>inconsistency))\n" + "agt:01(reason(icl>persuade>do,agt>thing,gol>uw,rec>person).@entry.@present,consistency(icl>uniformity>thing,ant>inconsistency))\n" +
// "qua:02(requirement(icl>duty>thing).@pl,all(icl>quantity,ant>some,per>thing))\n" + "qua:02(requirement(icl>duty>thing).@pl,all(icl>quantity,ant>some,per>thing))\n" +
// "mod:02(requirement(icl>duty>thing).@pl,functional(icl>adj,ant>nonfunctional))\n" + "mod:02(requirement(icl>duty>thing).@pl,functional(icl>adj,ant>nonfunctional))\n" +
// "agt:02(implement(icl>employ>do,agt>thing,obj>thing).@past.@not,requirement(icl>duty>thing).@pl)\n" + "agt:02(implement(icl>employ>do,agt>thing,obj>thing).@past.@not,requirement(icl>duty>thing).@pl)\n" +
// "plc(remove(icl>dismiss>do,plf>thing,agt>volitional_thing,obj>person).@entry.@present.@complete,srs.@def)\n" + "plc(remove(icl>dismiss>do,plf>thing,agt>volitional_thing,obj>person).@entry.@present.@complete,srs.@def)\n" +
// "obj(remove(icl>dismiss>do,plf>thing,agt>volitional_thing,obj>person).@entry.@present.@complete,\"2.3\".@topic)\n" + "obj(remove(icl>dismiss>do,plf>thing,agt>volitional_thing,obj>person).@entry.@present.@complete,\"2.3\".@topic)\n" +
// "mod(\"2.3\".@topic,\".0\")\n" + "mod(\"2.3\".@topic,\".0\")\n" +
// "mod(version(icl>interpretation>abstract_thing,agt>thing,obj>uw),this(icl>determiner>adj,mod<concrete_thing))\n" + "mod(version(icl>interpretation>abstract_thing,agt>thing,obj>uw),this(icl>determiner>adj,mod<concrete_thing))\n" +
// "plf(remove(icl>dismiss>do,plf>thing,agt>volitional_thing,obj>person).@entry.@present.@complete,version(icl>interpretation>abstract_thing,agt>thing,obj>uw))\n" + "plf(remove(icl>dismiss>do,plf>thing,agt>volitional_thing,obj>person).@entry.@present.@complete,version(icl>interpretation>abstract_thing,agt>thing,obj>uw))\n" +
// "and(implement(icl>employ>do,agt>thing,obj>thing).@past.@not,:01)\n" + "and(implement(icl>employ>do,agt>thing,obj>thing).@past.@not,:01)\n" +
// "rsn(remove(icl>dismiss>do,plf>thing,agt>volitional_thing,obj>person).@entry.@present.@complete,:02)\n" + "rsn(remove(icl>dismiss>do,plf>thing,agt>volitional_thing,obj>person).@entry.@present.@complete,:02)\n" +
// "{/unl}\n" + "{/unl}\n" +
// "[/S]\n" + "[/S]\n" +
"[/D]"; "[/D]";
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment