Index: atom.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/atom/atom.module,v
retrieving revision 1.35
diff -u -p -r1.35 atom.module
--- atom.module	8 May 2009 20:01:23 -0000	1.35
+++ atom.module	16 Sep 2009 16:43:37 -0000
@@ -113,6 +113,263 @@ function atom_menu() {
 }
 
 /**
+ * Convert HTML Entities to XML entities.
+ */
+function _atom_xml_to_html_entities($html) {
+  $table = array(
+    "&nbsp;"     => "&#160;",
+    "&iexcl;"    => "&#161;",
+    "&cent;"     => "&#162;",
+    "&pound;"    => "&#163;",
+    "&curren;"   => "&#164;",
+    "&yen;"      => "&#165;",
+    "&brvbar;"   => "&#166;",
+    "&sect;"     => "&#167;",
+    "&uml;"      => "&#168;",
+    "&copy;"     => "&#169;",
+    "&ordf;"     => "&#170;",
+    "&laquo;"    => "&#171;",
+    "&not;"      => "&#172;",
+    "&shy;"      => "&#173;",
+    "&reg;"      => "&#174;",
+    "&macr;"     => "&#175;",
+    "&deg;"      => "&#176;",
+    "&plusmn;"   => "&#177;",
+    "&sup2;"     => "&#178;",
+    "&sup3;"     => "&#179;",
+    "&acute;"    => "&#180;",
+    "&micro;"    => "&#181;",
+    "&para;"     => "&#182;",
+    "&middot;"   => "&#183;",
+    "&cedil;"    => "&#184;",
+    "&sup1;"     => "&#185;",
+    "&ordm;"     => "&#186;",
+    "&raquo;"    => "&#187;",
+    "&frac14;"   => "&#188;",
+    "&frac12;"   => "&#189;",
+    "&frac34;"   => "&#190;",
+    "&iquest;"   => "&#191;",
+    "&Agrave;"   => "&#192;",
+    "&Aacute;"   => "&#193;",
+    "&Acirc;"    => "&#194;",
+    "&Atilde;"   => "&#195;",
+    "&Auml;"     => "&#196;",
+    "&Aring;"    => "&#197;",
+    "&AElig;"    => "&#198;",
+    "&Ccedil;"   => "&#199;",
+    "&Egrave;"   => "&#200;",
+    "&Eacute;"   => "&#201;",
+    "&Ecirc;"    => "&#202;",
+    "&Euml;"     => "&#203;",
+    "&Igrave;"   => "&#204;",
+    "&Iacute;"   => "&#205;",
+    "&Icirc;"    => "&#206;",
+    "&Iuml;"     => "&#207;",
+    "&ETH;"      => "&#208;",
+    "&Ntilde;"   => "&#209;",
+    "&Ograve;"   => "&#210;",
+    "&Oacute;"   => "&#211;",
+    "&Ocirc;"    => "&#212;",
+    "&Otilde;"   => "&#213;",
+    "&Ouml;"     => "&#214;",
+    "&times;"    => "&#215;",
+    "&Oslash;"   => "&#216;",
+    "&Ugrave;"   => "&#217;",
+    "&Uacute;"   => "&#218;",
+    "&Ucirc;"    => "&#219;",
+    "&Uuml;"     => "&#220;",
+    "&Yacute;"   => "&#221;",
+    "&THORN;"    => "&#222;",
+    "&szlig;"    => "&#223;",
+    "&agrave;"   => "&#224;",
+    "&aacute;"   => "&#225;",
+    "&acirc;"    => "&#226;",
+    "&atilde;"   => "&#227;",
+    "&auml;"     => "&#228;",
+    "&aring;"    => "&#229;",
+    "&aelig;"    => "&#230;",
+    "&ccedil;"   => "&#231;",
+    "&egrave;"   => "&#232;",
+    "&eacute;"   => "&#233;",
+    "&ecirc;"    => "&#234;",
+    "&euml;"     => "&#235;",
+    "&igrave;"   => "&#236;",
+    "&iacute;"   => "&#237;",
+    "&icirc;"    => "&#238;",
+    "&iuml;"     => "&#239;",
+    "&eth;"      => "&#240;",
+    "&ntilde;"   => "&#241;",
+    "&ograve;"   => "&#242;",
+    "&oacute;"   => "&#243;",
+    "&ocirc;"    => "&#244;",
+    "&otilde;"   => "&#245;",
+    "&ouml;"     => "&#246;",
+    "&divide;"   => "&#247;",
+    "&oslash;"   => "&#248;",
+    "&ugrave;"   => "&#249;",
+    "&uacute;"   => "&#250;",
+    "&ucirc;"    => "&#251;",
+    "&uuml;"     => "&#252;",
+    "&yacute;"   => "&#253;",
+    "&thorn;"    => "&#254;",
+    "&yuml;"     => "&#255;",
+    "&fnof;"     => "&#402;",
+    "&Alpha;"    => "&#913;",
+    "&Beta;"     => "&#914;",
+    "&Gamma;"    => "&#915;",
+    "&Delta;"    => "&#916;",
+    "&Epsilon;"  => "&#917;",
+    "&Zeta;"     => "&#918;",
+    "&Eta;"      => "&#919;",
+    "&Theta;"    => "&#920;",
+    "&Iota;"     => "&#921;",
+    "&Kappa;"    => "&#922;",
+    "&Lambda;"   => "&#923;",
+    "&Mu;"       => "&#924;",
+    "&Nu;"       => "&#925;",
+    "&Xi;"       => "&#926;",
+    "&Omicron;"  => "&#927;",
+    "&Pi;"       => "&#928;",
+    "&Rho;"      => "&#929;",
+    "&Sigma;"    => "&#931;",
+    "&Tau;"      => "&#932;",
+    "&Upsilon;"  => "&#933;",
+    "&Phi;"      => "&#934;",
+    "&Chi;"      => "&#935;",
+    "&Psi;"      => "&#936;",
+    "&Omega;"    => "&#937;",
+    "&alpha;"    => "&#945;",
+    "&beta;"     => "&#946;",
+    "&gamma;"    => "&#947;",
+    "&delta;"    => "&#948;",
+    "&epsilon;"  => "&#949;",
+    "&zeta;"     => "&#950;",
+    "&eta;"      => "&#951;",
+    "&theta;"    => "&#952;",
+    "&iota;"     => "&#953;",
+    "&kappa;"    => "&#954;",
+    "&lambda;"   => "&#955;",
+    "&mu;"       => "&#956;",
+    "&nu;"       => "&#957;",
+    "&xi;"       => "&#958;",
+    "&omicron;"  => "&#959;",
+    "&pi;"       => "&#960;",
+    "&rho;"      => "&#961;",
+    "&sigmaf;"   => "&#962;",
+    "&sigma;"    => "&#963;",
+    "&tau;"      => "&#964;",
+    "&upsilon;"  => "&#965;",
+    "&phi;"      => "&#966;",
+    "&chi;"      => "&#967;",
+    "&psi;"      => "&#968;",
+    "&omega;"    => "&#969;",
+    "&thetasym;" => "&#977;",
+    "&upsih;"    => "&#978;",
+    "&piv;"      => "&#982;",
+    "&bull;"     => "&#8226;",
+    "&hellip;"   => "&#8230;",
+    "&prime;"    => "&#8242;",
+    "&Prime;"    => "&#8243;",
+    "&oline;"    => "&#8254;",
+    "&frasl;"    => "&#8260;",
+    "&weierp;"   => "&#8472;",
+    "&image;"    => "&#8465;",
+    "&real;"     => "&#8476;",
+    "&trade;"    => "&#8482;",
+    "&alefsym;"  => "&#8501;",
+    "&larr;"     => "&#8592;",
+    "&uarr;"     => "&#8593;",
+    "&rarr;"     => "&#8594;",
+    "&darr;"     => "&#8595;",
+    "&harr;"     => "&#8596;",
+    "&crarr;"    => "&#8629;",
+    "&lArr;"     => "&#8656;",
+    "&uArr;"     => "&#8657;",
+    "&rArr;"     => "&#8658;",
+    "&dArr;"     => "&#8659;",
+    "&hArr;"     => "&#8660;",
+    "&forall;"   => "&#8704;",
+    "&part;"     => "&#8706;",
+    "&exist;"    => "&#8707;",
+    "&empty;"    => "&#8709;",
+    "&nabla;"    => "&#8711;",
+    "&isin;"     => "&#8712;",
+    "&notin;"    => "&#8713;",
+    "&ni;"       => "&#8715;",
+    "&prod;"     => "&#8719;",
+    "&sum;"      => "&#8721;",
+    "&minus;"    => "&#8722;",
+    "&lowast;"   => "&#8727;",
+    "&radic;"    => "&#8730;",
+    "&prop;"     => "&#8733;",
+    "&infin;"    => "&#8734;",
+    "&ang;"      => "&#8736;",
+    "&and;"      => "&#8743;",
+    "&or;"       => "&#8744;",
+    "&cap;"      => "&#8745;",
+    "&cup;"      => "&#8746;",
+    "&int;"      => "&#8747;",
+    "&there4;"   => "&#8756;",
+    "&sim;"      => "&#8764;",
+    "&cong;"     => "&#8773;",
+    "&asymp;"    => "&#8776;",
+    "&ne;"       => "&#8800;",
+    "&equiv;"    => "&#8801;",
+    "&le;"       => "&#8804;",
+    "&ge;"       => "&#8805;",
+    "&sub;"      => "&#8834;",
+    "&sup;"      => "&#8835;",
+    "&nsub;"     => "&#8836;",
+    "&sube;"     => "&#8838;",
+    "&supe;"     => "&#8839;",
+    "&oplus;"    => "&#8853;",
+    "&otimes;"   => "&#8855;",
+    "&perp;"     => "&#8869;",
+    "&sdot;"     => "&#8901;",
+    "&lceil;"    => "&#8968;",
+    "&rceil;"    => "&#8969;",
+    "&lfloor;"   => "&#8970;",
+    "&rfloor;"   => "&#8971;",
+    "&lang;"     => "&#9001;",
+    "&rang;"     => "&#9002;",
+    "&loz;"      => "&#9674;",
+    "&spades;"   => "&#9824;",
+    "&clubs;"    => "&#9827;",
+    "&hearts;"   => "&#9829;",
+    "&diams;"    => "&#9830;",
+    "&OElig;"    => "&#338;",
+    "&oelig;"    => "&#339;",
+    "&Scaron;"   => "&#352;",
+    "&scaron;"   => "&#353;",
+    "&Yuml;"     => "&#376;",
+    "&circ;"     => "&#710;",
+    "&tilde;"    => "&#732;",
+    "&ensp;"     => "&#8194;",
+    "&emsp;"     => "&#8195;",
+    "&thinsp;"   => "&#8201;",
+    "&zwnj;"     => "&#8204;",
+    "&zwj;"      => "&#8205;",
+    "&lrm;"      => "&#8206;",
+    "&rlm;"      => "&#8207;",
+    "&ndash;"    => "&#8211;",
+    "&mdash;"    => "&#8212;",
+    "&lsquo;"    => "&#8216;",
+    "&rsquo;"    => "&#8217;",
+    "&sbquo;"    => "&#8218;",
+    "&ldquo;"    => "&#8220;",
+    "&rdquo;"    => "&#8221;",
+    "&bdquo;"    => "&#8222;",
+    "&dagger;"   => "&#8224;",
+    "&Dagger;"   => "&#8225;",
+    "&permil;"   => "&#8240;",
+    "&lsaquo;"   => "&#8249;",
+    "&rsaquo;"   => "&#8250;",
+    "&euro;"     => "&#8364;",
+  );
+  return strtr($html, $table);
+}
+
+/**
  * Produces an atom 1.0 feed for the front page content.
  */
 function atom_feed() {
@@ -244,7 +501,7 @@ function _atom_print_feed($nodes, $feed_
     if (variable_get('atom_display_summary', ATOM_DISPLAY_SUMMARY)) {
       // Summary
       $output .= '    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">';
-      $output .= check_markup($item->teaser, $item->format, FALSE);
+      $output .= _atom_xml_to_html_entities(check_markup($item->teaser, $item->format, FALSE));
       $output .= "    </div></summary>\n";
     }
 
@@ -252,7 +509,7 @@ function _atom_print_feed($nodes, $feed_
     if (variable_get('atom_display_content', ATOM_DISPLAY_CONTENT)) {
       // Body
       $output .= '    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">';
-      $output .= check_markup($item->body, $item->format, FALSE);
+      $output .= _atom_xml_to_html_entities(check_markup($item->body, $item->format, FALSE));
       $output .= "    </div></content>\n";
     }
 
