HTMLUtils.frink

View or download HTMLUtils.frink in plain text format


// 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 =~ %s/&/&/g;
   line =~ %s/</&lt;/g;
   line =~ %s/>/&gt;/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 = HTMLEncode[line];
   line =~ %s/"/&quot;/g;
//   line =~ %s/\\u/\\\\u/g;
   return line
}

// Decodes the hex-encoded parts of an argument.
URLDecode[arg] :=
{
   return arg =~ %s/%([0-9a-fA-F]{2})/char[parseInt[$1, 16]]/ge
}


// 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/g         // "(-1 " goes to "(-"
   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
}


View or download HTMLUtils.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 17958 days, 4 hours, 21 minutes ago.