Changeset 3435 for SMC


Ignore:
Timestamp:
08/20/13 11:28:24 (11 years ago)
Author:
vronk
Message:

reindent, handle missing values for init_x, _y attributes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • SMC/trunk/SMC/src/xsl/graph2json-d3.xsl

    r2451 r3435  
    1 <?xml version="1.0"?>
     1<?xml version="1.0" encoding="UTF-8"?>
    22<!-- Generic stylesheet for viewing XML -->
    3 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    4          xmlns:my="myFunctions"
    5          xmlns:svg="http://www.w3.org/2000/svg" >
    6 
    7                         <xsl:output method="text" encoding="utf-8"                         
    8                         indent="yes"
    9                             />
     3<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:svg="http://www.w3.org/2000/svg" xmlns:my="myFunctions" version="2.0">
     4    <xsl:output method="text" encoding="utf-8" indent="yes"/>
    105<!--
    116<purpose>transform a graph-xml (internal, TODO: align with some standard)
     
    1813<sample>
    1914-->
    20 
    21     <xsl:param name="rank-distance" select="100" />
    22    
    23     <xsl:param name="svg-file" select="'cmd-dep-graph.svg'" />
     15    <xsl:param name="max-level" select="10"/>
     16    <xsl:param name="rank-distance" select="100"/>
     17    <xsl:param name="svg-file" select="'cmd-dep-graph.svg'"/>
    2418<!--    <xsl:param name="svg-file" select="'cmd-dep-graph.svg'" />-->
    25    
    26     <xsl:variable name="svg" select="if(doc-available(resolve-uri($svg-file,base-uri(/)))) then doc(resolve-uri($svg-file,base-uri(/))) else () " />
     19    <xsl:variable name="svg" select="if(doc-available(resolve-uri($svg-file,base-uri(/)))) then doc(resolve-uri($svg-file,base-uri(/))) else () "/>
    2720<!--        <xsl:variable name="svg" select="if(doc-available($svg-file)) then doc($svg-file) else () " />-->
    28     <xsl:variable name="svg-elements" select="$svg//svg:g[@class='node']" />
     21    <xsl:variable name="svg-elements" select="$svg//svg:g[@class='node']"/>
    2922   
    3023    <!-- average rank-distance
    3124        trying to determine based on the x-values of the text-nodes-->
    32     <xsl:variable name="svg-rank-distance" >
    33    
     25    <xsl:variable name="svg-rank-distance">
    3426        <xsl:variable name="xs">
    3527            <xsl:for-each-group select="$svg-elements/svg:text/@x" group-by=".">
    36                
    37                 <xsl:sort select="." data-type="number"></xsl:sort>
    38                 <xsl:sequence select="number(.)"></xsl:sequence>
     28                <xsl:sort select="." data-type="number"/>
     29                <xsl:sequence select="number(.)"/>
    3930            </xsl:for-each-group>
    40         </xsl:variable>
    41        
    42         <xsl:variable name="xs-seq" select="tokenize($xs, ' ')" />
     31        </xsl:variable>
     32        <xsl:variable name="xs-seq" select="tokenize($xs, ' ')"/>
    4333        <xsl:variable name="diffs">
    44             <xsl:for-each select="$xs-seq[position() !=last()]" >
    45                 <xsl:variable name="pos" select="position()"></xsl:variable>
    46                 <xsl:sequence select="number($xs-seq[$pos + 1]) - number(current())"></xsl:sequence>
     34            <xsl:for-each select="$xs-seq[position() !=last()]">
     35                <xsl:variable name="pos" select="position()"/>
     36                <xsl:sequence select="number($xs-seq[$pos + 1]) - number(current())"/>
    4737            </xsl:for-each>
    4838        </xsl:variable>
    4939        <!--<xsl:copy-of select="avg(number(tokenize($diffs,';')))" />-->
    50         <xsl:value-of select="floor(avg(for $i in tokenize($diffs,' ') return number($i)))" />
     40        <xsl:value-of select="floor(avg(for $i in tokenize($diffs,' ') return number($i)))"/>
    5141    </xsl:variable>
    52    
    53     <xsl:template match="/" >
    54         <xsl:apply-templates select="graph" mode="json-d3" ></xsl:apply-templates>
     42    <xsl:template match="/">
     43        <xsl:apply-templates select="graph" mode="json-d3"/>
    5544    </xsl:template>
    56    
    57 <xsl:template match="graph" mode="json-d3">
     45    <xsl:template match="graph" mode="json-d3">
    5846<!--    <xsl:value-of select="doc-available($svg-file)" />
    5947    svg-file:<xsl:value-of select="$svg-file" />
    6048    svg-rank-distance: <xsl:value-of select="$svg-rank-distance"></xsl:value-of>
    61 -->
    62    
    63     <xsl:text>{</xsl:text>
    64     <xsl:apply-templates select="nodes" />
    65     <xsl:text>,
     49-->
     50        <xsl:text>{</xsl:text>
     51        <xsl:apply-templates select="nodes"/>
     52        <xsl:text>,
    6653    </xsl:text>
    67     <xsl:apply-templates select="edges" />
    68     <xsl:text>}</xsl:text>
    69 </xsl:template>
    70    
    71 <xsl:template match="nodes" >
    72     <xsl:text> "nodes": [</xsl:text>
    73     <xsl:apply-templates select="*"></xsl:apply-templates>
    74      <xsl:text>]</xsl:text>
    75 </xsl:template>
    76    
    77  <xsl:template match="nodes/*">
    78     <xsl:text>{</xsl:text>   
    79         <xsl:for-each select="@*" >
    80             <xsl:text>"</xsl:text><xsl:value-of select="name()" /><xsl:text>":"</xsl:text>
    81                                    <xsl:value-of select="." /><xsl:text>",</xsl:text>
     54        <xsl:apply-templates select="edges"/>
     55        <xsl:text>}</xsl:text>
     56    </xsl:template>
     57    <xsl:template match="nodes">
     58        <xsl:text> "nodes": [</xsl:text>
     59        <xsl:apply-templates select="*"/>
     60        <xsl:text>]</xsl:text>
     61    </xsl:template>
     62    <xsl:template match="nodes/*">
     63        <xsl:text>{</xsl:text>
     64        <xsl:for-each select="@*">
     65            <xsl:text>"</xsl:text>
     66            <xsl:value-of select="name()"/>
     67            <xsl:text>":"</xsl:text>
     68            <xsl:value-of select="."/>
     69            <xsl:text>",</xsl:text>
    8270<!--           <xsl:if test="not(position()=last())"><xsl:text>, </xsl:text></xsl:if>            -->
    8371        </xsl:for-each>
    8472    <!-- adding initial x based on level -->
    85      <xsl:variable name="svg-element" select="$svg-elements[starts-with(svg:title,current()/@key)][1]" />
    86      <xsl:text>"init_x":</xsl:text><xsl:value-of select="if ($svg-element) then floor($svg-element/svg:text/@x div $svg-rank-distance  * $rank-distance)   else @level * $rank-distance" />
     73        <xsl:variable name="svg-element" select="$svg-elements[starts-with(svg:title,current()/@key)][1]"/>
     74        <xsl:text>"init_x":</xsl:text>
     75        <xsl:value-of select="if ($svg-element/svg:text/@x) then floor($svg-element/svg:text/@x div $svg-rank-distance  * $rank-distance)   else if (number(@level)=number(@level)) then   @level * $rank-distance else $max-level * $rank-distance"/>
    8776<!--    <xsl:text>, "px":</xsl:text><xsl:value-of select="@level * $rank-distance" />-->
    88      <xsl:text>, "init_y":</xsl:text><xsl:value-of select="if ($svg-element) then round($svg-element/svg:text/@y div -50) else @level * $rank-distance" />
     77        <xsl:text>, "init_y":</xsl:text>
     78        <xsl:value-of select="if ($svg-element/svg:text/@y) then round($svg-element/svg:text/@y div -50) else if (number(@level)=number(@level)) then   @level * $rank-distance else $max-level * $rank-distance"/>
    8979<!--    <xsl:text>, "py":</xsl:text><xsl:value-of select="@level * $rank-distance" />-->
    9080        <!--"name":"</xsl:text><xsl:value-of select="@label" /><xsl:text>", "weight":</xsl:text>
    9181    <xsl:value-of select="@count" /><xsl:text>, "group": </xsl:text><xsl:value-of select="@group" />-->
    92     <xsl:text>}</xsl:text>
    93     <xsl:if test="not(position()=last())"><xsl:text>,
    94     </xsl:text></xsl:if>
    95 </xsl:template>
    96 
    97 
    98     <xsl:template match="edges" >
     82        <xsl:text>}</xsl:text>
     83        <xsl:if test="not(position()=last())">
     84            <xsl:text>,
     85    </xsl:text>
     86        </xsl:if>
     87    </xsl:template>
     88    <xsl:template match="edges">
    9989        <xsl:text> "links": [</xsl:text>
    100         <xsl:apply-templates select="*"></xsl:apply-templates>
     90        <xsl:apply-templates select="*"/>
    10191        <xsl:text>]</xsl:text>
    10292    </xsl:template>
    103 
    104 <xsl:template match="edges/*">   
    105     <xsl:text>{"source":</xsl:text><xsl:value-of select="@ix_from" /><xsl:text>, "target":</xsl:text><xsl:value-of
    106                         select="@ix_to" /><xsl:text>, "value":</xsl:text><xsl:value-of select="@value" />
     93    <xsl:template match="edges/*">
     94        <xsl:text>{"source":</xsl:text>
     95        <xsl:value-of select="@ix_from"/>
     96        <xsl:text>, "target":</xsl:text>
     97        <xsl:value-of select="@ix_to"/>
     98        <xsl:text>, "value":</xsl:text>
     99        <xsl:value-of select="@value"/>
    107100<!--        <xsl:text>{"source":"</xsl:text><xsl:value-of select="@from" /><xsl:text>", "target":"</xsl:text><xsl:value-of select="@to" /><xsl:text>", "value":</xsl:text><xsl:value-of select="$count" />-->
    108     <xsl:text>}</xsl:text>
    109     <xsl:if test="not(position()=last())"><xsl:text>,
    110 </xsl:text></xsl:if>
    111    
    112 </xsl:template>
    113 
    114 <xsl:template match="text()"/> 
    115 
     101        <xsl:text>}</xsl:text>
     102        <xsl:if test="not(position()=last())">
     103            <xsl:text>,
     104</xsl:text>
     105        </xsl:if>
     106    </xsl:template>
     107    <xsl:template match="text()"/>
    116108</xsl:stylesheet>
Note: See TracChangeset for help on using the changeset viewer.