Re: save as (regular) html problem
- To: mathgroup at smc.vnet.net
- Subject: [mg79254] Re: save as (regular) html problem
- From: "Chris Chiasson" <chris at chiasson.name>
- Date: Sun, 22 Jul 2007 04:21:55 -0400 (EDT)
On Wed, 11 Jul 2007 15:00:00 UT, Tom Zeller <support at wolfram.com> wrote:
<snip/>
> Chris,
>
> Thanks for the clarification. I do not know of a workaround beyond
> installing the StyleSheet. I will send this in as a suggestion.
>
<snip/>
While I was tracing Export to solve another problem, I ran across the
code that handles the stylesheets. To make a long story short, the
code at the end of this email will make both File->Save As HTML and
Export["blah.html",<<some notebook object>>] use the stylesheets that
are in the same directory as the notebook. It can be placed in the
kernel's init.m or executed manually.
Elaboration/Speculation:
I noticed that the System`Convert`CommonDump`GetStyleSheet function
was properly finding notebook-local stylesheets, but only by
augmenting the result of Options[$FrontEnd, StyleSheetPath]. I also
noticed that MathLink`CallFrontEnd[ExportPacket[...]] was only passing
the name of the stylesheet to the front end. I concluded that the part
of the front end that is communicating with the kernel is only using
Options[$FrontEnd,StyleSheetPath]. There were several options that I
could try to make the front end find the stylesheet, but the one I
chose was to overload the multi-format calling form of
System`ConvertersDump`ExportInternal so that it would change
Options[$FrontEnd,StyleSheetPath]. Corrections are welcome.
Code:
System`Convert`CommonDump`Workarounds`interceptStyleSheetPath=True;
System`ConvertersDump`ExportInternal[channel_,expr_NotebookObject,format_List,opts___]/;$Notebooks&&System`Convert`CommonDump`Workarounds`interceptStyleSheetPath&&MemberQ[format,"HTML"|"XHTMLMathML"|"XHTML"]:=With[{nbfile="FileName"/.NotebookInformation[expr],oldStyleSheetPath=StyleSheetPath/.AbsoluteOptions[$FrontEnd,StyleSheetPath]},Block[{System`Convert`CommonDump`Workarounds`interceptStyleSheetPath=False,result},CheckAbort[SetOptions[$FrontEnd,StyleSheetPath->Prepend[oldStyleSheetPath,nbfile[[{1}]]]];result=System`ConvertersDump`ExportInternal[channel,expr,format,opts];SetOptions[$FrontEnd,StyleSheetPath->oldStyleSheetPath];result,SetOptions[$FrontEnd,StyleSheetPath->oldStyleSheetPath];Abort[]]]/;nbfile=!="FileName"]
--
http://chris.chiasson.name/