RE: an SVG /Javascript question

"David Dailey" <[email protected]>
Newsgroups gmane.text.xml.svg.devel
Message-ID <000f01cdbec7$15b00940$41101bc0$@net>
Hi Wade, yeah, that's exactly the sort of thing I'm doing. Seems like
inventing a loopless way of doing it would be sorta fun, but maybe a bit
difficult to handle all the situations in which one might do it. As you
point out though, it does seem to arise frequently!

 

Cheers

David

 

From: [email protected] [mailto:[email protected]]
On Behalf Of G. Wade Johnson
Sent: Thursday, November 08, 2012 11:28 PM
To: [email protected]
Subject: Re: [svg-developers] an SVG /Javascript question

 

  

Hi David,

On Thu, 8 Nov 2012 20:10:06 -0500
"David Dailey" <[email protected] <mailto:ddailey%40zoominternet.net>
> wrote:

> In order to perform transform operations in script rather than doing
> it declaratively (whence the stack of transforms can become gnarly),
> I was thinking about ways to simplify the code (from the human rather
> than the computational perspective). By such perspective, the minimum
> number of statements is to be optimized rather than minimizing
> run-time - I know it is a funny metric, but people have been looking
> at things like this since the 1970's believe it or not.
> 
> 
> 
> Anyhow, I wanted to develop a function which would take the d
> attribute of paths or glyphs (of any sort):
> 
> 
> 
> d="M 1550 710.5 Q 1650 840 1610.5 920.5 Q 1580 1010 1130.5 970 Q 690
> 930 840 810 Q 990 690 1010.5 450.5 Q 1040 220 1190 190.5 Q 1340 170
> 1480.5 210 Q 1630 250 1540 420 Q 1450 590 1550 710.5 M 940.5 860.5 Q
> 610 1100 630.5 1170 Q 660 1240 770 1250.5 Q 880 1270 1110.5 1270 Q
> 1350 1270 1610 1300 Q 1870 1330 1920 1250.5 Q 1970 1180 1810 1060 Q
> 1650 940 1460.5 780.5 Q 1280 630 940.5 860.5 z"
> 
> 
> 
> Or
> 
> 
> 
> d="M50,100
> 
> A100,50 0 0 1 250,100
> 
> A80,40 0 0 1 90,100
> 
> A60,30 0 0 1 210,100
> 
> A40,20 0 0 1 130,100
> 
> A20,10 0 0 1 170,100"

This description reminds me of a kind of functional programming
approach I've used in the past.

In pseudo-code, it would do something like

new_d = join_command( transform_A(
function(a) { /* do something to each A */ },
split_commands( d )
)
);

The split_commands function would return a list of commands.
The transform_A function would identify A commands and apply the
supplied function to each, returning a modified A. The transform_A
function would then return the modified A commands along with the
original of any non-A commands.

Obviously, there would be a transform_M, etc. for each command type.

As an alternative, you could use a generic transform() that expects the
supplied function to recognize the command, parse it, modify the result
and put it back together.

I like the individual transform_* style because the identifying and
parsing/recombining logic would be hidden inside that one function.

The result would still require loop work, but it would be inside the
split_command, transform_*, and join_command functions.

This style takes a little getting used to, but it can be quite powerful
for problems with this structure.

HTH,
G. Wade

> and then separate the subcommands (A,M, Q, L, l, s, z, etc) from the
> coordinates thusly
> 
> 
> 
> A=d.match(/regexp/g)
> 
> B=d.split(/regexp/g)
> 
> 
> 
> And then perform arithmetic on all i in A and then join everything
> back together in one swell foop:
> 
> 
> 
> C=d.gaps(/regexp/g,/regexp2/g) (where the mythical "gaps" method of
> the array object would return an array of the number of
> regexp2-delimited items between A's boundaries)
> 
> 
> 
> The properly defined "gaps" method would then allow something like
> 
> 
> 
> D=superJoin(A,B,C) ==d
> 
> And D=superjoin (A,arithmetic(B),C) == transform(d) 
> 
> 
> 
> As it is, I'm going to have to write loops to walk through the
> structure, pushing operators, numbers and coordinates onto separate
> stacks and then to loop through again to reconstitute the whole mess.
> Not a terrible thing, but .. Such tedium!
> 
> 
> 
> Any ideas if such a construct has been posited before? It would be
> very handy for SVG path processing. 
> 
> 
> 
> Cheers
> 
> David
> 
> 
> 
> [Non-text portions of this message have been removed]
> 





[Non-text portions of this message have been removed]



------------------------------------

-----
To unsubscribe send a message to: [email protected]
-or-
visit http://groups.yahoo.com/group/svg-developers and click "edit my membership"
----Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/svg-developers/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/svg-developers/join
    (Yahoo! ID required)

<*> To change settings via email:
    [email protected] 
    [email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.