Changeset 7283


Ignore:
Timestamp:
Feb 6, 2018, 3:07:14 PM (4 years ago)
Author:
kopal
Message:
  • now we escape utf-8 strings in memo fields to allow utf-8 symbols in rtf boxes, e.g. Cyrillic letters
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/WorkspaceManagerModel/Model/Tools/ModelPersistance.cs

    r7256 r7283  
    113113            {
    114114                //create flowdocument out of data in xaml package format
    115                 var flowDocument = new FlowDocument();
     115                var flowDocument = new FlowDocument();               
    116116                var textRange = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);
     117               
    117118                using (var memoryStream = new MemoryStream(textmodel.data))
    118119                {                   
     
    130131                foreach (var key in replacements.Keys)
    131132                {
    132                     rtf = rtf.Replace(key, replacements[key]);
     133                    rtf = rtf.Replace(key, GetRtfUnicodeEscapedString(replacements[key]));
    133134                }
    134135                //create new textRange with replaced values
     
    145146                }
    146147            }
    147         }       
     148        }
     149
     150        /// <summary>
     151        /// Converts the unicode chars to rtf escape values
     152        /// obtained from https://stackoverflow.com/questions/1368020/how-to-output-unicode-string-to-rtf-using-c
     153        /// </summary>
     154        /// <param name="s"></param>
     155        /// <returns></returns>
     156        private static string GetRtfUnicodeEscapedString(string s)
     157        {
     158            var sb = new StringBuilder();
     159            foreach (var c in s)
     160            {
     161                if (c <= 0x7f)
     162                {
     163                    sb.Append(c);
     164                }
     165                else
     166                {
     167                    sb.Append("\\u" + Convert.ToUInt32(c) + "?");
     168                }
     169            }
     170            return sb.ToString();
     171        }
     172
    148173
    149174        private void restoreSettings(PersistantModel persistantModel, WorkspaceModel workspacemodel)
Note: See TracChangeset for help on using the changeset viewer.