<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[GlotPress][746] trunk/gp-includes/formats/format_resx.php: Fix export format for resx.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg > ul, #logmsg > ol { margin-left: 0; margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://glotpress.trac.wordpress.org/changeset/746">746</a></dd>
<dt>Author</dt> <dd>markoheijnen</dd>
<dt>Date</dt> <dd>2013-04-26 14:34:13 +0000 (Fri, 26 Apr 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>Fix export format for resx. Fixes <a href="http://glotpress.trac.wordpress.org/ticket/237">#237</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkgpincludesformatsformat_resxphp">trunk/gp-includes/formats/format_resx.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkgpincludesformatsformat_resxphp"></a>
<div class="modfile"><h4>Modified: trunk/gp-includes/formats/format_resx.php (745 => 746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/gp-includes/formats/format_resx.php        2013-03-31 17:09:32 UTC (rev 745)
+++ trunk/gp-includes/formats/format_resx.php   2013-04-26 14:34:13 UTC (rev 746)
</span><span class="lines">@@ -21,6 +21,10 @@
</span><span class="cx">          $this->exported = '';
</span><span class="cx">          $this->line( '<?xml version="1.0" encoding="utf-8"?>' );
</span><span class="cx">          $this->line( '<root>' );
</span><ins>+
+               $this->add_schema_info();
+               $this->add_schema_declaration();
+
</ins><span class="cx">           $this->res_header( 'resmimetype', 'text/microsoft-resx' );
</span><span class="cx">          $this->res_header( 'version', '2.0' );
</span><span class="cx">          $this->res_header( 'reader', 'System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' );
</span><span class="lines">@@ -100,6 +104,124 @@
</span><span class="cx">          $string = str_replace( array( '&', '<' ), array( '&amp;', '&lt;' ), $string );
</span><span class="cx">          return $string;
</span><span class="cx">  }
</span><ins>+
+
+       function add_schema_info() {
+               $this->line('<!-- 
+               Microsoft ResX Schema 
+
+               Version 2.0
+
+               The primary goals of this format is to allow a simple XML format 
+               that is mostly human readable. The generation and parsing of the 
+               various data types are done through the TypeConverter classes 
+               associated with the data types.
+
+               Example:
+
+               ... ado.net/XML headers & schema ...
+               <resheader name="resmimetype">text/microsoft-resx</resheader>
+               <resheader name="version">2.0</resheader>
+               <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+               <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+               <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+               <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+               <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+                       <value>[base64 mime encoded serialized .NET Framework object]</value>
+               </data>
+               <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+                       <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+                       <comment>This is a comment</comment>
+               </data>
+
+               There are any number of "resheader" rows that contain simple 
+               name/value pairs.
+               
+               Each data row contains a name, and value. The row also contains a 
+               type or mimetype. Type corresponds to a .NET class that support 
+               text/value conversion through the TypeConverter architecture. 
+               Classes that don\'t support this are serialized and stored with the 
+               mimetype set.
+               
+               The mimetype is used for serialized objects, and tells the 
+               ResXResourceReader how to depersist the object. This is currently not 
+               extensible. For a given mimetype the value must be set accordingly:
+               
+               Note - application/x-microsoft.net.object.binary.base64 is the format 
+               that the ResXResourceWriter will generate, however the reader can 
+               read any of the formats listed below.
+               
+               mimetype: application/x-microsoft.net.object.binary.base64
+               value   : The object must be serialized with 
+                               : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+                               : and then encoded with base64 encoding.
+               
+               mimetype: application/x-microsoft.net.object.soap.base64
+               value   : The object must be serialized with 
+                               : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+                               : and then encoded with base64 encoding.
+
+               mimetype: application/x-microsoft.net.object.bytearray.base64
+               value   : The object must be serialized into a byte array 
+                               : using a System.ComponentModel.TypeConverter
+                               : and then encoded with base64 encoding.
+       -->', 1 );
+       }
+
+       function add_schema_declaration() {
+               $this->line( '<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">', 1 );
+               $this->line( '<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />', 2 );
+               $this->line( '<xsd:element name="root" msdata:IsDataSet="true">', 2 );
+               $this->line( '<xsd:complexType>', 3 );
+               $this->line( '<xsd:choice maxOccurs="unbounded">', 4 );
+
+               $this->line( '<xsd:element name="metadata">', 5 );
+               $this->line( '<xsd:complexType>', 6 );
+               $this->line( '<xsd:sequence>', 7 );
+               $this->line( '<xsd:element name="value" type="xsd:string" minOccurs="0" />', 8 );
+               $this->line( '</xsd:sequence>', 7 );
+               $this->line( '<xsd:attribute name="name" use="required" type="xsd:string" />', 7 );
+               $this->line( '<xsd:attribute name="type" type="xsd:string" />', 7 );
+               $this->line( '<xsd:attribute name="mimetype" type="xsd:string" />', 7 );
+               $this->line( '<xsd:attribute ref="xml:space" />', 7 );
+               $this->line( '</xsd:complexType>', 6 );
+               $this->line( '</xsd:element>', 5 );
+
+               $this->line( '<xsd:element name="assembly">', 5 );
+               $this->line( '<xsd:complexType>', 6 );
+               $this->line( '<xsd:attribute name="alias" type="xsd:string" />', 7 );
+               $this->line( '<xsd:attribute name="name" type="xsd:string" />', 7 );
+               $this->line( '</xsd:complexType>', 6 );
+               $this->line( '</xsd:element>', 5 );
+
+               $this->line( '<xsd:element name="data">', 5 );
+               $this->line( '<xsd:complexType>', 6 );
+               $this->line( '<xsd:sequence>', 7 );
+               $this->line( '<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />', 8 );
+               $this->line( '<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />', 8 );
+               $this->line( '</xsd:sequence>', 7 );
+               $this->line( '<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />', 7 );
+               $this->line( '<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />', 7 );
+               $this->line( '<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />', 7 );
+               $this->line( '<xsd:attribute ref="xml:space" />', 7 );
+               $this->line( '</xsd:complexType>', 6 );
+               $this->line( '</xsd:element>', 5 );
+
+               $this->line( '<xsd:element name="resheader">', 5 );
+               $this->line( '<xsd:complexType>', 6 );
+               $this->line( '<xsd:sequence>', 7 );
+               $this->line( '<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />', 8 );
+               $this->line( '</xsd:sequence>', 7 );
+               $this->line( '<xsd:attribute name="name" type="xsd:string" use="required" />', 7 );
+               $this->line( '</xsd:complexType>', 6 );
+               $this->line( '</xsd:element>', 5 );
+
+               $this->line( '</xsd:choice>', 4 );
+               $this->line( '</xsd:complexType>', 3 );
+               $this->line( '</xsd:element>', 2 );
+               $this->line( '</xsd:schema>', 1 );
+       }
+
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> GP::$formats['resx'] = new GP_Format_ResX;
</span><span class="cx">\ No newline at end of file
</span></span></pre>
</div>
</div>

</body>
</html>