Difference between revisions of "Template:ListEdges"

From AtlasWiki
Jump to: navigation, search
(adding newlines)
(Switching to permitted and specified edges, instead of just one class of edge relationships)
Line 2: Line 2:
  
 
If the parameter "parents" is given a comma-separated list of the parents of the node, inherited edges will also be listed.
 
If the parameter "parents" is given a comma-separated list of the parents of the node, inherited edges will also be listed.
</noinclude>{{#ask: [[edge to {{PAGENAME}}::+]]
+
</noinclude>{{#ask: [[permitted edge to {{PAGENAME}}::+]]
| ?edge to {{PAGENAME}}
+
| ?permitted edge to {{PAGENAME}}
 
| format=array
 
| format=array
 
| headers=hide
 
| headers=hide
| name=inEdges
+
| name=permittedInEdges
 +
}}{{#ask: [[specified edge to {{PAGENAME}}::+]]
 +
| ?specified edge to {{PAGENAME}}
 +
| format=array
 +
| headers=hide
 +
| name=specifiedInEdges
 +
}}{{#ask: [[permitted edge from {{PAGENAME}}::+]]
 +
| ?permitted edge from {{PAGENAME}}
 +
| format=array
 +
| headers=hide
 +
| name=permittedOutEdges
 +
}}{{#ask: [[specified edge from {{PAGENAME}}::+]]
 +
| ?specified edge from {{PAGENAME}}
 +
| format=array
 +
| headers=hide
 +
| name=specifiedOutEdges
 
}}<noinclude><!--
 
}}<noinclude><!--
  
Above, we've stored all the in edges in an array named "inEdges".
+
Above, we've stored all the in edges in an arrays named "permittedInEdges", "specifiedInEdges", "permittedOutEdges", and "specifiedOutEdges".
  
Each entry in the array is in this format:
+
Each entry in each array is in this format:
  
 
[name of edge]<PROP>[name of predecessor]$SEP$[multiplicity]$SEP$[edge description]
 
[name of edge]<PROP>[name of predecessor]$SEP$[multiplicity]$SEP$[edge description]
Line 21: Line 36:
 
[name of edge]<PROP>[name of predecessor]$SEP$[multiplicity]$SEP$[edge description]<MANY>[name of other predecessor]$SEP$[multiplicity]
 
[name of edge]<PROP>[name of predecessor]$SEP$[multiplicity]$SEP$[edge description]<MANY>[name of other predecessor]$SEP$[multiplicity]
  
...now we parse those into an "In Edge" table, if and only if there is at least one in edge:
+
...now we want similar information about inherited in edges:
 
+
--></noinclude>{{#switch:{{#arraysize:inEdges}}| 0 = | #default =
+
{{{!}} class="xcsgtable"
+
! In Edge !! Predecessor (Comes From) !! Multiplicity !! Description
+
{{!}}-
+
{{!}}{{#arrayprint:inEdges|&#32;
+
{{!}}-
+
{{!}}|var|{{#arraydefine:edgeRelationships|var|<PROP>|}}{{#arraydefine:relationships|{{#arrayindex:edgeRelationships|1}}|<MANY>|}}{{#arrayprint:relationships|&#32;
+
{{!}}-
+
{{!}}|@@@@|[[{{#arrayindex:edgeRelationships|0}}]] {{!}}{{!}} [[{{#explode:@@@@|$SEP$|0}}]] {{!}}{{!}} {{#explode:@@@@|$SEP$|1}} {{!}}{{!}} {{ReconstructLinks|{{#explode:@@@@|$SEP$|2}}}} }} }}
+
{{!}}}
+
}}<noinclude><!--
+
 
+
If we were given inheritance information, discover and list the inherited edges as well...if there are any inherited edges.
+
 
+
--></noinclude>{{#if:{{{parents|}}}|{{#arraydefine:parents|{{{parents}}}|,|}}{{#if:{{#arrayprint:parents||@@@@|{{InheritEdgesTo|@@@@}}}}|
+
{{{!}} class="xcsgtable"
+
{{!}}-
+
! colspan="5" {{!}} Inherited In Edges
+
{{!}}-
+
! Inherited From !! In Edge  !! Predecessor (Comes From) !! Multiplicity !! Description
+
{{#arrayprint:parents||@@@@|&#32;
+
{{InheritEdgesTo|@@@@}}}}
+
{{!}}} }} }}<noinclude><!--
+
 
+
Next we get the out edges:
+
 
+
--></noinclude>{{#ask: [[edge from {{PAGENAME}}::+]]
+
| ?edge from {{PAGENAME}}
+
| format=array
+
| headers=hide
+
| name=outEdges
+
}}<noinclude><!--
+
 
+
If both arrays have values, then we need to add the whitespace that goes between the two tables.
+
 
+
--></noinclude>{{#switch:{{#arraysize:inEdges}}| 0 = | #default = {{#switch:{{#arraysize:outEdges}}| 0 = |
+
 
+
}} }}<noinclude><!--
+
 
+
We print the out edges table:
+
 
+
--></noinclude>{{#switch:{{#arraysize:outEdges}}| 0 = | #default =
+
{{{!}} class="xcsgtable"
+
! Out Edge !! Successor (Points To) !! Multiplicity !! Description
+
{{!}}-
+
{{!}}{{#arrayprint:outEdges|&#32;
+
{{!}}-
+
{{!}}|var|{{#arraydefine:edgeRelationships|var|<PROP>|}}{{#arraydefine:relationships|{{#arrayindex:edgeRelationships|1}}|<MANY>|}}{{#arrayprint:relationships|&#32;
+
{{!}}-
+
{{!}}|@@@@|[[{{#arrayindex:edgeRelationships|0}}]] {{!}}{{!}} [[{{#explode:@@@@|$SEP$|0}}]] {{!}}{{!}} {{#explode:@@@@|$SEP$|1}} {{!}}{{!}} {{ReconstructLinks|{{#explode:@@@@|$SEP$|2}}}} }} }}
+
{{!}}}
+
}}<noinclude><!--
+
 
+
And the inherited out edges table:
+
  
--></noinclude>{{#if:{{{parents|}}}|{{#if:{{#arrayprint:parents||@@@@|{{InheritEdgesFrom|@@@@}}}}|
+
--></noinclude>{{#arraydefine:parentsArray|{{{parents|}}}|,|}}<noinclude><!--
{{{!}} class="xcsgtable"
+
{{!}}-
+
We gather the information on inherited edges as well, then defer to a helper template to print the actual tables
! colspan="5" {{!}} Inherited Out Edges
+
{{!}}-
+
--></noinclude>{{ListEdges.generateTable
! Inherited From !! Out Edge !! Successor (Points To) !! Multiplicity !! Description
+
| title = Specified In Edges
{{#arrayprint:parents||@@@@|&#32;
+
| edgeTitle = In Edge
{{InheritEdgesFrom|@@@@}}}}
+
| nodeTitle = <abbr title="The node that the edge comes from">Predecessor</abbr>
{{!}}} }} }}<noinclude>[[Category:XCSG Templates]]</noinclude>
+
| uninheritedEdges = {{#arrayprint:specifiedInEdges|<EDGE_SEP>}}
 +
| inheritedEdges = {{#arrayprint:parentsArray|<PARENT_SEP>|@@@@|{{#if:{{EdgesTo|@@@@|specified}}|@@@@<PARENT>{{EdgesTo|@@@@|specified}} }} }}
 +
}}{{ListEdges.generateTable
 +
| title = Specified Out Edges
 +
| edgeTitle = Out Edge
 +
| nodeTitle = <abbr title="The node that the edge points to">Successor</abbr>
 +
| uninheritedEdges = {{#arrayprint:specifiedOutEdges|<EDGE_SEP>}}
 +
| inheritedEdges = {{#arrayprint:parentsArray|<PARENT_SEP>|@@@@|{{#if:{{EdgesFrom|@@@@|specified}}|@@@@<PARENT>{{EdgesFrom|@@@@|specified}} }} }}
 +
}}{{ListEdges.generateTable
 +
| title = Known Possible In Edges
 +
| edgeTitle = In Edge
 +
| nodeTitle = <abbr title="The node that the edge comes from">Predecessor</abbr>
 +
| uninheritedEdges = {{#arrayprint:permittedInEdges|<EDGE_SEP>}}
 +
| inheritedEdges = {{#arrayprint:parentsArray|<PARENT_SEP>|@@@@|{{#if:{{EdgesTo|@@@@|permitted}}|@@@@<PARENT>{{EdgesTo|@@@@|permitted}} }} }}
 +
}}{{ListEdges.generateTable
 +
| title = Known Possible Out Edges
 +
| edgeTitle = Out Edge
 +
| nodeTitle = <abbr title="The node that the edge points to">Successor</abbr>
 +
| uninheritedEdges = {{#arrayprint:permittedOutEdges|<EDGE_SEP>}}
 +
| inheritedEdges = {{#arrayprint:parentsArray|<PARENT_SEP>|@@@@|{{#if:{{EdgesFrom|@@@@|permitted}}|@@@@<PARENT>{{EdgesFrom|@@@@|permitted}} }} }}
 +
}}

Revision as of 13:28, 12 May 2014

For use on node kind pages, automatically lists edges declared on the current page.

If the parameter "parents" is given a comma-separated list of the parents of the node, inherited edges will also be listed.