// Utilities for HTML manipulation. /* This encodes strings safely for HTML (unless it's going in a tag parameter, in which case you should use HTMLEncodeQuoted below.) */ HTMLEncode[line] := { if ! line return "" line = toString[line] line =~ %s/&/&/g; line =~ %s/</</g; line =~ %s/>/>/g; return line } /* This encodes strings safely for HTML, including the case where it's going into a quoted tag parameter. This is usually always safer and better. */ HTMLEncodeQuoted[line] := { if ! line return "" line = toString[line] line = HTMLEncode[line]; line =~ %s/"/"/g; // line =~ %s/\\u/\\\\u/g; return line } // Make the <OPTIONS> tags for an HTML <SELECT> list, with the specified // item selected. // makeselect[list, selected] makeSelect[list, selected] := { for [name, val] list { if (val != undef) // Has value { vs = "$val" // Coerce to string valStr = (val != undef) ? " VALUE=\"" + HTMLEncode[vs] + "\"" : "" sel = (vs == selected ? " SELECTED" : "") } else sel = (name == selected ? " SELECTED" : "") println[" <OPTION$valStr$sel>" + HTMLEncode["$name"]] } } // Format a Frink expression into a prettier HTML equivalent. formatExpression[expr] := { expr =~ %s/\+(\s*)\-1\s+/-$1/g // "+ -1" goes to "-" expr =~ %s/\+(\s*)\-/-$1/g // "+ -" goes to "-" // expr =~ %s/\((\s*)\-1\s+([^+])/(-$1$2/g // "(-1 " goes to "(-" unless followed by + expr =~ %s/\^([\/\d\w\.\-]+(?:\[[^\]]?\])?)/<SUP>$1<\/SUP>/g // Draw superscripts for integers and floating-point numbers. return expr } // Format an expression using some symbolic rules. formatExpressionSymbolic[expr] := { expr = formatExpression[expr] return removeApproximations[expr] } // Remove approximations removeApproximations[expr] := { expr =~ %s/\s*\((approx\.|exactly).*?\)//g return expr }