From 90ae413a94da014dbf7a6a8ab584f7c668483a5a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 27 Feb 2014 00:01:50 +0000 Subject: pgf 3.0.0 git-svn-id: svn://tug.org/texlive/trunk@33057 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/generic/pgf/systemlayer/pgfsys-tex4ht.def | 352 +++++++++++---------- 1 file changed, 193 insertions(+), 159 deletions(-) (limited to 'Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-tex4ht.def') diff --git a/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-tex4ht.def b/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-tex4ht.def index 71f819cc2bc..cc5dadb1173 100644 --- a/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-tex4ht.def +++ b/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-tex4ht.def @@ -7,11 +7,9 @@ % % See the file doc/generic/pgf/licenses/LICENSE for more details. -\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/systemlayer/pgfsys-tex4ht.def,v 1.23 2010/08/18 12:14:47 ludewich Exp $ +\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/systemlayer/pgfsys-tex4ht.def,v 1.25 2013/08/06 17:46:08 tantau Exp $ -\RequirePackage{xcolor} - % Driver commands for tex4ht @@ -28,6 +26,11 @@ \newcount\pgf@sys@svg@picnum +\def\pgfsys@pictureboxsynced#1{% + \pgfsys@beginscope\pgflowlevelsynccm\box#1\pgfsys@endscope% +} + + %% %% initial support of Mathml and xhtml inside svg through the svg:foreignelement tag %% @@ -83,49 +86,60 @@ % class="}{\%s}{-\%s}{x-x-\%d}{}{">}{} %} +\def\pgfsys@svg@newline{\Hnewline} + % we don't want tex4ht putting

and

tags automatically in our svg code and causing invalid xhtml in our svg pictures \newif\ifpgfsys@CssIncluded@\pgfsys@CssIncluded@false \def\pgfsys@beginpicture{% - \EndP\HtmlParOff - \pgfkeys{/tikz/tex4ht node/escape=false}% text only nodes are the default. Advantage : pure svg pictures are the default, nicer for text only nodes. - % Disadvantages : this rendering methods produce more invalid or degraded svg pictures than with the foreignelement tag + \EndP\HtmlParOff + \pgfkeys{/pgf/tex4ht node/escape=false}% + % text only nodes are the default. Advantage : pure svg pictures are + % the default, nicer for text only nodes. + % Disadvantages : this rendering methods produce more invalid or degraded svg pictures than with the foreignelement tag %% we use css to control the display of foreignelement rendered text nodes - \ifpgfsys@CssIncluded@ - \else - \Css{ - .foreignobject {% - line-height:100\%; - font-size:120\%; % this is the trick....a font of size 100% in a box scaled down to half size makes it a half size font. -% you'll have to double the size of things that you want to have a regular size in this half-scaled box though - font-family:STIXgeneral,Times,Symbol,cmr10,CMSY10,CMEX10;% can't wait for the stix font...the cmr10, etc font are available from the mozilla site, times and symbols should be okey - padding:0; - margin:0; -% background-color:\#12ff55; usefull for debugging positioning - text-align:center; % good for centered text nodes...will have to improve that later on...with more integration with tikz options for text nodes - } - }% - \Css{% - math {%, math[mode="inline"] { - vertical-align:baseline; - line-height:100\%; - font-size:100\%; - font-family:STIXGeneral,Times,Symbol, cmr10,cmsy10,cmex10,cmmi10; - font-style: normal; - margin:0; -% background-color:\#99ff99; - padding:0; - }% - }% - \pgfsys@CssIncluded@true - \fi + \ifpgfsys@CssIncluded@ + \else + \Css{ + .foreignobject {% + line-height:100\%; + font-size:120\%; % this is the trick....a font of size 100% in + % a box scaled down to half size makes it a + % half size font. + % you'll have to double the size of things + % that you want to have a regular size in + % this half-scaled box though + font-family:STIXgeneral,Times,Symbol,cmr10,CMSY10,CMEX10;% + % can't wait for the stix font...the cmr10, etc font are + % available from the mozilla site, times and symbols should be + % okey + padding:0; + margin:0; + % background-color:\#12ff55; usefull for debugging positioning + text-align:center; % good for centered text nodes...will have to improve that later on...with more integration with pgf options for text nodes + } + }% + \Css{% + math {%, math[mode="inline"] { + vertical-align:baseline; + line-height:100\%; + font-size:100\%; + font-family:STIXGeneral,Times,Symbol, cmr10,cmsy10,cmex10,cmmi10; + font-style: normal; + margin:0; + % background-color:\#99ff99; + padding:0; + }% + }% + \pgfsys@CssIncluded@true + \fi }% \def\pgfsys@endpicture{% - \HtmlParOn - \par% FIXME : was '\Par' but that seems to be undefined!? + \HtmlParOn + \par% FIXME : was '\Par' but that seems to be undefined!? }% -% this is okey for both rendering methods for text nodes (mtext or foreignelement)... +% this is okay for both rendering methods for text nodes (mtext or foreignelement)... \def\pgfsys@typesetpicturebox#1{% \global\advance\pgf@sys@svg@picnum by 1\relax% % Ok, compute width/height @@ -143,8 +157,7 @@ \pgf@xc=\pgf@x% \pgf@yc=\pgf@y% \pgfsysprotocol@flushcurrentprotocol% - \HCode{

SVG-Viewer needed.

}% \special{t4ht>\jobname-\the\pgf@sys@svg@picnum.svg}% -%%%%%%%% This is necessary to control the svg through css - \pgfkeys{% - /tikz/tex4ht node/css/.get=\pgfsys@foreignobject@css - }% - \pgfsys@invoke{\Hnewline% added that + %%%%%%%% This is necessary to control the svg through css + \pgfkeys{% + /pgf/tex4ht node/css/.get=\pgfsys@foreignobject@css + }% + \pgfsys@invoke{\Hnewline% added that \Hnewline}% added that %%%%%%%%%%%%%%% maybee I should add an option to change the css, for the whole picture \pgfsys@invoke{\Hnewline }% \wd#1=0pt% \ht#1=0pt% @@ -230,44 +244,55 @@ %% we have to use some "evil" ^^ tex4ht hackery % tex4ht hackery {% grouping necessary cause we change the catcode of ":" - \catcode`:=11\relax - %%% this is necessary to calculate the size of text nodes with inline maths - % (it is an improvement of tex4ht, got to ask eitan gurary if he could put it in the tex4ht code) - \gdef\DviMathAlt{% - \a:DviMath\leavevmode \MathClass \ht:special{t4ht@(}\hbox\bgroup{\expandafter\ifx\csname ht:everypar\endcsname\relax\expandafter\everypar\else \expandafter\ht:everypar\fi{}\leavevmode\ht:special{t4ht@)}}\DviSend - }% -% these are configures for the foreignelement rendering method of text nodes : we let tex4ht write xhtml and mathml in the svg picture -% - \gdef\pgfsys@foreignobject@configure{% - \Configure{$}{\Configure{@math}{%\a:mathml - display="inline" }\DviMathAlt}{\EndDviMath}{}%%% we REALLY need to use \DviMathAlt here instead of \DviMath see above remark - \Configure{$$}{\Configure{@math}{%\a:mathml - display="block" }\IgnorePar - \ifvmode\else \HCode{}\fi\EndP - \DviMath}{\EndDviMath\ShowPar\pgfsys@foreignobject@par{\csname HCondtrue\endcsname\noindent} - }{\DisplayMathtrue}% - \Configure{SUB}{\Send{BACK}{<\a:mathml msub><\a:mathml mrow\Hnewline>}% - \Tg\Tg<\a:mathml mrow\Hnewline>\trap:base}{\Tg\TG}% - \Configure{SUP}{\Send{BACK}{<\a:mathml msup><\a:mathml mrow\Hnewline>}% - \Tg\Tg<\a:mathml mrow\Hnewline>\trap:base}{\Tg\TG}% - \Configure{SUBSUP}{\Send{BACK}{<\a:mathml msubsup><\a:mathml mrow\Hnewline>}% - \Tg\Tg<\a:mathml mrow\Hnewline>\trap:base}{\Tg\Tg<\a:mathml mrow\Hnewline>\trap:base}{\Tg\TG}% - \Configure{htf}{0}{+}{}{}% - }% - \global\let\pgfsys@foreignobject@par=\par % use this instead of \par -- \Configure is no \long macro (at least in one of the older versions). - -% these are the configures for the mtext rendering method of text nodes : we turn everything into regular character (don't want math modes or subsup) -% and we hope it works (it doesn't if the text nodes aren't simple) - \gdef\pgfsys@mtext@configure{% - % no configures for \(\) and \[\] those might be needed for context or Latex. Let me know ! - \Configure{$$}{}{}{}% no block maths - \Configure{$}{}{}{}%$ no inline maths - \Configure{SUB}{\HCode{}}{\HCode{}}% - \Configure{SUP}{\HCode{}}{\HCode{}}% - \Configure{SUBSUP}{}{}{}% not both sub and sup - \Configure{htf} {0}{+}{}{}% - }% + \catcode`:=11\relax + %%% this is necessary to calculate the size of text nodes with + %%% inline maths + % (it is an improvement of tex4ht, got to ask eitan gurary if he + % could put it in the tex4ht code) + \gdef\DviMathAlt{% + \a:DviMath\leavevmode \MathClass + \ht:special{t4ht@(}\hbox\bgroup{\expandafter\ifx\csname + ht:everypar\endcsname\relax\expandafter\everypar\else + \expandafter\ht:everypar\fi{}\leavevmode\ht:special{t4ht@)}}\DviSend + }% + % these are configures for the foreignelement rendering method of text nodes : we let tex4ht write xhtml and mathml in the svg picture + % + \gdef\pgfsys@foreignobject@configure{% + \Configure{$}{\Configure{@math}{%\a:mathml + display="inline" }\DviMathAlt}{\EndDviMath}{}%%% we REALLY need to use \DviMathAlt here instead of \DviMath see above remark + \Configure{$$}{\Configure{@math}{%\a:mathml + display="block" }\IgnorePar + \ifvmode\else \HCode{}\fi\EndP + \DviMath}{\EndDviMath\ShowPar\pgfsys@foreignobject@par{\csname HCondtrue\endcsname\noindent} + }{\DisplayMathtrue}% + \Configure{SUB}{\Send{BACK}{<\a:mathml msub><\a:mathml mrow\Hnewline>}% + \Tg\Tg<\a:mathml mrow\Hnewline>\trap:base}{\Tg\TG}% + \Configure{SUP}{\Send{BACK}{<\a:mathml msup><\a:mathml mrow\Hnewline>}% + \Tg\Tg<\a:mathml mrow\Hnewline>\trap:base}{\Tg\TG}% + \Configure{SUBSUP}{\Send{BACK}{<\a:mathml msubsup><\a:mathml mrow\Hnewline>}% + \Tg\Tg<\a:mathml mrow\Hnewline>\trap:base}{\Tg\Tg<\a:mathml mrow\Hnewline>\trap:base}{\Tg\TG}% + \Configure{htf}{0}{+}{}{}% + }% + \global\let\pgfsys@foreignobject@par=\par % use this instead of \par + % -- \Configure is no \long macro (at + % least in one of the older + % versions). + + % these are the configures for the mtext rendering method of text + % nodes : we turn everything into regular character (don't want math + % modes or subsup) + % and we hope it works (it doesn't if the text nodes aren't simple) + \gdef\pgfsys@mtext@configure{% + % no configures for \(\) and \[\] those might be needed for + % context or Latex. Let me know ! + \Configure{$$}{}{}{}% no block maths + \Configure{$}{}{}{}%$ no inline maths + \Configure{SUB}{\HCode{}}{\HCode{}}% + \Configure{SUP}{\HCode{}}{\HCode{}}% + \Configure{SUBSUP}{}{}{}% not both sub and sup + \Configure{htf} {0}{+}{}{}% + }% }% % a counter to produce unique ids for each text node rendered with foreign element @@ -295,8 +320,8 @@ \def\pgfutil@endminipage{% % same thing here % -% \ifpgfsys@textonly\else\EndP\HtmlParOff\fi - \egroup\egroup +% \ifpgfsys@textonly\else\EndP\HtmlParOff\fi + \egroup\egroup }% @@ -306,71 +331,73 @@ \newdimen\pgf@t % this is the alternate hbox routine that renders text nodes through the foreignobject tag \def\pgfsys@foreignobject@hbox#1{% - % Compute box y translation (x translation is correct). - \pgf@y=-\ht#1\relax - \HCode{\Hnewline}% scaling work around (damn dumb browsers !) - % Compute box size (scaled 2 times) - % this is necessary to make the browser scale the font down 50% (the STUPID browsers won't make font-size:50% happen, - % so we have to work around this by making svg scale the things down 50%, doubling the size of the text node frame (i.e. no changement there) - \pgf@x=2\wd#1\relax - \pgf@y=2\ht#1\relax - \advance\pgf@y by 2\dp#1\relax - % this is to adjust the y translation to compensate for the differences between the TeX and the Html models for lines - \setbox\pgfsys@foreignobject@Box=\hbox{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ - $abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZf_1^1\overline D)_1^1\vec i\vec j$}% - \pgf@t=\ht#1\relax - \advance\pgf@t by -\ht\pgfsys@foreignobject@Box\relax - \pgf@s=\pgf@t\relax - \advance\pgf@s by \dp#1\relax - \advance\pgf@s by -\dp\pgfsys@foreignobject@Box\relax - \ifnum\pgf@s>0\relax - \pgf@s=0pt - \pgf@t=0pt - \else - \advance \pgf@y by -2\pgf@s\relax - \pgf@t=2\pgf@t\relax - \fi - % - \HCode{}% - % this is to make use of the css, class and id options through which you can control the way things display - \pgfkeys{% - /tikz/tex4ht node/css/.get=\pgfsys@foreignobject@css,% - /tikz/tex4ht node/class/.get=\pgfsys@foreignobject@class,% - /tikz/tex4ht node/id/.get=\pgfsys@foreignobject@id - }% - \HCode{\Hnewline - \Hnewline - \Hnewline -% I'll have to look into this, perhaps there are better doctype....  aren't recognised and produces invalid svg pictures -% a workaround (not implemented yet) would be to make them into entities of the svg picture. - \Hnewline -
\Hnewline - }% - \box#1% - \HCode{% -
\Hnewline - \Hnewline -
\Hnewline - }% -% debug positioning not needed but it would be nice to let it there to control things later on -% \HCode{} - \HCode{
\Hnewline}% - \global\advance\pgf@sys@svg@nodenum by 1\relax + % Compute box y translation (x translation is correct). + \pgf@y=-\ht#1\relax + \HCode{\Hnewline}% scaling work around (damn dumb browsers !) + % Compute box size (scaled 2 times) + % this is necessary to make the browser scale the font down 50% (the STUPID browsers won't make font-size:50% happen, + % so we have to work around this by making svg scale the things down 50%, doubling the size of the text node frame (i.e. no changement there) + \pgf@x=2\wd#1\relax + \pgf@y=2\ht#1\relax + \advance\pgf@y by 2\dp#1\relax + % this is to adjust the y translation to compensate for the differences between the TeX and the Html models for lines + \setbox\pgfsys@foreignobject@Box=\hbox{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ + $abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZf_1^1\overline D)_1^1\vec i\vec j$}% + \pgf@t=\ht#1\relax + \advance\pgf@t by -\ht\pgfsys@foreignobject@Box\relax + \pgf@s=\pgf@t\relax + \advance\pgf@s by \dp#1\relax + \advance\pgf@s by -\dp\pgfsys@foreignobject@Box\relax + \ifnum\pgf@s>0\relax + \pgf@s=0pt + \pgf@t=0pt + \else + \advance \pgf@y by -2\pgf@s\relax + \pgf@t=2\pgf@t\relax + \fi + % + \HCode{}% + % this is to make use of the css, class and id options through which you can control the way things display + \pgfkeys{% + /pgf/tex4ht node/css/.get=\pgfsys@foreignobject@css,% + /pgf/tex4ht node/class/.get=\pgfsys@foreignobject@class,% + /pgf/tex4ht node/id/.get=\pgfsys@foreignobject@id + }% + \HCode{\Hnewline + \Hnewline + \Hnewline + % I'll have to look into this, perhaps there are better + % doctype....  aren't recognised and produces invalid svg + % pictures a workaround (not implemented yet) would be to make + % them into entities of the svg picture. + \Hnewline +
\Hnewline + }% + \box#1% + \HCode{% +
\Hnewline + \Hnewline +
\Hnewline + }% + % debug positioning not needed but it would be nice to let it there to control things later on + % \HCode{} + \HCode{
\Hnewline}% + \global\advance\pgf@sys@svg@nodenum by 1\relax }% % the options and the code that controls it all (switches between \pgfsys@mtext@hbox and \pgfsys@foreignelement@hbox) \pgfkeys{% - /tikz/.cd, - tex4ht node/escape/.is choice, - tex4ht node/escape/false/.code={\let\pgfsys@hbox\pgfsys@mtext@hbox\pgfsys@mtext@configure\pgfsys@textonlytrue}, - tex4ht node/escape/true/.code={\let\pgfsys@hbox\pgfsys@foreignobject@hbox\pgfsys@foreignobject@configure\pgfsys@textonlyfalse}, - tex4ht node/css/.initial=\jobname, - tex4ht node/class/.initial=foreignobject, - tex4ht node/id/.initial=\jobname\the\pgf@sys@svg@picnum-\the\pgf@sys@svg@nodenum + /pgf/.cd, + tex4ht node/escape/.is choice, + tex4ht node/escape/false/.code={\let\pgfsys@hbox\pgfsys@mtext@hbox\pgfsys@mtext@configure\pgfsys@textonlytrue}, + tex4ht node/escape/true/.code={\let\pgfsys@hbox\pgfsys@foreignobject@hbox\pgfsys@foreignobject@configure\pgfsys@textonlyfalse}, + tex4ht node/css/.initial=\jobname, + tex4ht node/class/.initial=foreignobject, + tex4ht node/id/.initial=\jobname\the\pgf@sys@svg@picnum-\the\pgf@sys@svg@nodenum }% @@ -426,19 +453,26 @@ \pgfsysprotocol@literal{\Hnewline}% } -% Protect against color.4ht evil meddling with xcolor: -\let\pgf@xcolor@declaredcolor=\@declaredcolor -\let\pgf@xcolor@undeclaredcolor=\@undeclaredcolor + +\ifpgfutil@format@is@latex + % Protect against color.4ht evil meddling with xcolor: + \RequirePackage{xcolor} + \let\pgf@xcolor@declaredcolor=\@declaredcolor + \let\pgf@xcolor@undeclaredcolor=\@undeclaredcolor +\fi \AtBeginDocument{ \let\pgfsys@invoke=\pgfsys@body@invoke \let\pgfsys@shadingoutsidepgfpicture=\pgfsys@body@shadingoutsidepgfpicture \let\pgfsys@shadinginsidepgfpicture=\pgfsys@body@shadinginsidepgfpicture - \let\pgf@texht@declaredcolor=\@declaredcolor - \let\pgf@texht@undeclaredcolor=\@undeclaredcolor - \def\@declaredcolor{\ifpgfpicture\expandafter\pgf@xcolor@declaredcolor\else\expandafter\pgf@texht@declaredcolor\fi} - \def\@undeclaredcolor{\ifpgfpicture\expandafter\pgf@xcolor@undeclaredcolor\else\expandafter\pgf@texht@undeclaredcolor\fi} - %\ConfigureEnv{pgfpicture}{}{}{}{} there is no environment in plain TeX and this produces errors + \ifpgfutil@format@is@latex + \let\pgf@texht@declaredcolor=\@declaredcolor + \let\pgf@texht@undeclaredcolor=\@undeclaredcolor + \def\@declaredcolor{\ifpgfpicture\expandafter\pgf@xcolor@declaredcolor\else\expandafter\pgf@texht@declaredcolor\fi} + \def\@undeclaredcolor{\ifpgfpicture\expandafter\pgf@xcolor@undeclaredcolor\else\expandafter\pgf@texht@undeclaredcolor\fi} + \fi + \def\pgfutil@color{\pgfsetcolor} + % \ConfigureEnv{pgfpicture}{}{}{}{} there is no environment in plain TeX and this produces errors % this might be needed for context or latex though....let me know ! }% -- cgit v1.2.3