fonts one last time
Charles Hartman
charles.hartman at conncoll.edu
Sat Jul 9 19:46:29 EDT 2005
(Whew.) Here's a script for the main stack of a two-stack app full of
fields called "Text" with a mix of fonts and styles. As far as I can
tell from preliminary tests, this -- at last! -- should (1) adjust
the default text font and (2) adjust the monospaced font I need for
some text, both by looking for particular fonts, while (3) preserving
the special-font status of those monospace passages and (4)
preserving all style markings (link, bold, etc), yet (5) changing
text after those to the default font (which Rev refuses to do by
itself).
In case somebody else has the same combination of problems I've had.
Charles Hartman
Professor of English, Poet in Residence
Connecticut College
charles.hartman at conncoll.edu
*the Scandroid* is at cherry.conncoll.edu/cohar/Programs.htm
=============================================================
on preOpenStack
-- could check platform (which is the overall point here);
-- but really care only whether certain fonts are available.
-- First: establish names of running (proportional) and special
-- (monospaced) fonts for "Text" fields
/* ----- PROPOSED PRODUCTION CODE
if "Palatino" is in the fontNames then
put "Palatino" into theRunningFont
put 12 into mySize
else
put "Times New Roman" into theRunningFont
put 12 into mySize -- check this on Windows!
end if
if "Courier" is in the fontNames then
put "Courier" into theMonoFont
else
put "Courier New" into theMonoFont
end if
*/
---------- TESTING CODE; COMMENT OUT FOR PRODUCTION!
ask "running (non-monospaced) font?"
put it into theRunningFont
ask "monospaced font?"
put it into theMonoFont
put 12 into mySize
-- do the change only if need default font other than present one
if theRunningFont is not the textFont of this stack then
changeFieldTextProps "English Metrics","Text",mySize, \
theRunningFont,theMonoFont
changeFieldTextProps "Reference Stack","Text",mySize, \
theRunningFont,theMonoFont
end if
end preOpenStack
-- based on David Epstein's script for preserving styles
-- while changing the default font throughout a stack
on changeFieldTextProps myStack,f,mySize,myFont,myMonoFont
repeat with c = 1 to the number of cards of stack myStack
if exists(field f of card c of stack myStack) then
put the htmlText of field f of card c of stack myStack \
into hold[c]
-- seek and change all font specifications to mono font
put offset("<font face=", hold[c]) into tagFoundAt
-- if tag not found we'll skip this repeat
repeat while tagFoundAt is not zero
put tagFoundAt into endOfTag
add offset(">",hold[c],tagFoundAt) to endOfTag
put myMonoFont into char tagFoundAt+12 to endOfTag-2 \
of hold[c]
--answer char tagFoundAt+12 to endOfTag-2]
put offset("<font face=",hold[c],endOfTag) into increment
if increment is zero
then exit repeat
put increment + endOfTag into TagFoundAT
end repeat
end if
end repeat
set the textSize of stack myStack to mySize
set the textFont of stack myStack to myFont
repeat with c = 1 to the number of cards of stack myStack
if exists(field f of card c of stack myStack)
then set the htmlText of field f of card c of stack myStack \
to hold[c]
end repeat
end changeFieldTextProps
More information about the use-livecode
mailing list