Changeset 520


Ignore:
Timestamp:
Sep 16, 2009, 11:51:47 AM (12 years ago)
Author:
Matthäus Wander
Message:

AnotherEditor:

  • fixed bug in recent "QuickWatch of any Array" method
  • minor change for default QuickWatch

DataManager:

  • replaced Encoding (Cryptool.PluginBase.EncodingTypes) property with TextEncoding (System.Text.Encoding)

Dictionary:

  • enabled changing dict file during play mode (using PropertyChanged event and allowReexecution flag)
  • fixed recently introduced NullReferenceException
  • added support to above TextEncoding Property

MonoalphabeticAnalysis:

  • fixed erroneous file reference in .csproj

TextOutput:

  • fixed recently introduced NullReferenceException

WordPatterns:

  • added metainfo to german dictionary
  • improvements handling empty input and empty result set
Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPluginBase/Miscellaneous/DataManager.cs

    r511 r520  
    11using System;
    22using System.Collections.Generic;
    3 using System.Linq;
    43using System.Text;
    54using System.IO;
    65using System.Reflection;
    7 using System.Runtime.Serialization;
    8 using System.Xml.Serialization;
    96
    107namespace Cryptool.PluginBase.Miscellaneous
     
    7875                metaInfo.KeyValues = keyValues;
    7976
    80                 if (keyValues.ContainsKey("encoding"))
    81                     metaInfo.Encoding = (EncodingTypes) Enum.Parse(typeof(EncodingTypes), keyValues["encoding"]);
     77                // TODO: should ignore case
     78                if (keyValues.ContainsKey("textencoding"))
     79                {
     80                    try
     81                    {
     82                        metaInfo.TextEncoding = Encoding.GetEncoding(keyValues["textencoding"]);
     83                    }
     84                    catch (ArgumentException e)
     85                    {
     86                        // Encoding error, defaulting to null
     87                        metaInfo.TextEncoding = null;
     88                        // TODO: throw warning about unknown encoding
     89                    }
     90                }
    8291            }
    8392
     
    100109        }
    101110
    102         public EncodingTypes Encoding
     111        public Encoding TextEncoding
    103112        {
    104113            get;
  • trunk/CrypPlugins/Dictionary/Dictionary.cs

    r511 r520  
    219219namespace Dictionary
    220220{
    221     [Author("Thomas Schmid", "thomas.schmid@cryptool.org", "Uni Siegen", "http://www.uni-siegen.de")]
     221    [Author("Thomas Schmid, Matthäus Wander", "thomas.schmid@cryptool.org", "Uni Siegen", "http://www.uni-siegen.de")]
    222222    [PluginInfo(true, "Dictionary", "Reads values from a Dictionary and returns all entries concatenated with given delimiter in one string.", null, "Dictionary/icon.png")]
    223223    public class CryptoolDictionary : IInput
     
    232232        private static Dictionary<DataFileMetaInfo, string[]> dicValues = new Dictionary<DataFileMetaInfo, string[]>();
    233233        private static Dictionary<DataFileMetaInfo, string> dicValuesOld = new Dictionary<DataFileMetaInfo, string>();
     234       
     235        // list of dictionaries
    234236        private static DataFileMetaInfo[] dicList;
    235237
     238        // Manages wordlist files
    236239        private DataManager dataMgr = new DataManager();
    237240
     241        // Flag to enable re-execution during play mode
     242        private bool allowReexecution = false;
     243
    238244        # endregion private_variables
    239245
     
    242248            get
    243249            {
    244                 if (dicList.Length > settings.Dictionary)
     250                if (dicList != null && dicList.Length > settings.Dictionary)
    245251                    return dicList[settings.Dictionary];
    246252                else
     
    329335            EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs("OutputString"));
    330336            EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(100, 100));
     337
     338            // enable re-execution after the first run
     339            allowReexecution = true;
    331340        }
    332341
    333342        public void PostExecution()
    334343        {
     344            // disable re-execution when leaving play mode
     345            allowReexecution = false;
    335346        }
    336347
     
    363374
    364375                    FileStream fs = file.DataFile.OpenRead();
    365                     StreamReader sr = new StreamReader(fs);
     376                    StreamReader sr;
     377                    if (file.TextEncoding == null)
     378                        sr = new StreamReader(fs);
     379                    else
     380                        sr = new StreamReader(fs, file.TextEncoding);
     381
    366382                    List<string> list = new List<string>();
    367383                    while (!sr.EndOfStream)
     
    394410        {
    395411            LoadFileList();
     412
     413            settings.PropertyChanged += SettingsPropertyChanged; // catch settings changes
     414        }
     415
     416        private void SettingsPropertyChanged(object sender, PropertyChangedEventArgs e)
     417        {
     418            // if user chooses another dictionary, force re-execution
     419            if (allowReexecution && e.PropertyName == "Dictionary")
     420            {
     421                Execute();
     422            }
    396423        }
    397424
  • trunk/CrypPlugins/Dictionary/DictionarySettings.cs

    r511 r520  
    222222    # endregion private_variables
    223223
    224     [TaskPane("Dictionary", "Select dictionary with keywords.", "", 0, false, DisplayLevel.Beginner, ControlType.DynamicComboBox, new string[] { "Collection" })]
     224    public delegate void ExecuteCallback();
     225
     226    public CryptoolDictionarySettings()
     227    {
     228    }
     229
     230    [TaskPane("Dictionary", "Select dictionary with keywords.", "", 0, true, DisplayLevel.Beginner, ControlType.DynamicComboBox, new string[] { "Collection" })]
    225231    public int Dictionary
    226232    {
     
    275281    protected void OnPropertyChanged(string name)
    276282    {
    277       if (PropertyChanged != null)
    278       {
    279         PropertyChanged(this, new PropertyChangedEventArgs(name));
    280       }
     283        if (PropertyChanged != null)
     284        {
     285            PropertyChanged(this, new PropertyChangedEventArgs(name));
     286        }
    281287    }
    282288
  • trunk/CrypPlugins/MonoalphabeticAnalysis/MonoalphabeticAnalysis.csproj

    r512 r520  
    6363    <Compile Include="CollectionElement.cs" />
    6464    <Compile Include="MonoalphabeticAnalysis.cs" />
    65     <Compile Include="..\..\..\..\MonoalphabeticAnalysisSettings.cs">
    66       <Link>MonoalphabeticAnalysisSettings.cs</Link>
    67     </Compile>
     65    <Compile Include="MonoalphabeticAnalysisSettings.cs" />
    6866    <Compile Include="ShogunStatistics.cs" />
    6967    <Compile Include="SortElements.cs" />
  • trunk/CrypPlugins/TextOutput/TextOutput.cs

    r487 r520  
    407407            OnPropertyChanged(propertyKey);
    408408        }
    409 
    410         // check type explicitly, if connector type is set to anything else than object
    411         if (getCurrentType() != typeof(object) && !getCurrentType().Equals(value.GetType()))
    412         {
    413             GuiLogMessage(String.Format("Input data type does not match setting. Expected: {0}, Found: {1}", getCurrentType(), value.GetType()),
    414                 NotificationLevel.Error);
    415             return;
    416         }
    417 
    418         if (value is bool)
    419         {
    420             if (settings.BooleanAsNumeric)
    421             {
    422                 fillValue = Convert.ToInt32(value).ToString();
     409        else
     410        {
     411            // check type explicitly, if connector type is set to anything else than object
     412            if (getCurrentType() != typeof(object) && !getCurrentType().Equals(value.GetType()))
     413            {
     414                GuiLogMessage(String.Format("Input data type does not match setting. Expected: {0}, Found: {1}", getCurrentType(), value.GetType()),
     415                    NotificationLevel.Error);
     416                return;
     417            }
     418
     419            if (value is bool)
     420            {
     421                if (settings.BooleanAsNumeric)
     422                {
     423                    fillValue = Convert.ToInt32(value).ToString();
     424                }
     425                else
     426                {
     427                    fillValue = ((bool)value).ToString();
     428                }
     429            }
     430            else if (value is CryptoolStream)
     431            {
     432                listCryptoolStreamsOut.Add((CryptoolStream)value);
     433                CryptoolStream stream = value as CryptoolStream;
     434                // GuiLogMessage("Stream: Filling TextBoxes now...", NotificationLevel.Debug);
     435                if (stream.Length > settings.MaxLength)
     436                    AddMessage("WARNING - Stream is too large (" + (stream.Length / 1024).ToString("0.00") + " kB), output will be truncated to " + (settings.MaxLength / 1024).ToString("0.00") + "kB", NotificationLevel.Warning);
     437                byte[] byteValues = new byte[Math.Min(settings.MaxLength, stream.Length)];
     438                int bytesRead;
     439                stream.Seek(0, SeekOrigin.Begin);
     440                bytesRead = stream.Read(byteValues, 0, byteValues.Length);
     441                fillValue = GetStringForSelectedEncoding(byteValues);
     442            }
     443            else if (value is byte[])
     444            {
     445                byte[] byteArray = value as byte[];
     446                // GuiLogMessage("Byte array: Filling textbox now...", NotificationLevel.Debug);
     447                if (byteArray.Length > settings.MaxLength)
     448                {
     449                    AddMessage("WARNING - byte array is too large (" + (byteArray.Length / 1024).ToString("0.00") + " kB), output will be truncated to " + (settings.MaxLength / 1024).ToString("0.00") + "kB", NotificationLevel.Warning);
     450                }
     451
     452                long size = byteArray.Length;
     453                if (size > settings.MaxLength)
     454                {
     455                    size = settings.MaxLength;
     456                }
     457                byte[] sizedArray = new byte[size];
     458                for (int i = 0; i < size; i++)
     459                {
     460                    sizedArray[i] = byteArray[i];
     461                }
     462                fillValue = GetStringForSelectedEncoding(sizedArray);
    423463            }
    424464            else
    425465            {
    426                 fillValue = ((bool)value).ToString();
    427             }
    428         }
    429         else if (value is CryptoolStream)
    430         {
    431           listCryptoolStreamsOut.Add((CryptoolStream)value);
    432           CryptoolStream stream = value as CryptoolStream;
    433           // GuiLogMessage("Stream: Filling TextBoxes now...", NotificationLevel.Debug);
    434           if (stream.Length > settings.MaxLength)
    435             AddMessage("WARNING - Stream is too large (" + (stream.Length / 1024).ToString("0.00") + " kB), output will be truncated to " + (settings.MaxLength / 1024).ToString("0.00") + "kB", NotificationLevel.Warning);
    436           byte[] byteValues = new byte[Math.Min(settings.MaxLength, stream.Length)];
    437           int bytesRead;
    438           stream.Seek(0, SeekOrigin.Begin);
    439           bytesRead = stream.Read(byteValues, 0, byteValues.Length);
    440           fillValue = GetStringForSelectedEncoding(byteValues);
    441         }
    442         else if (value is byte[])
    443         {
    444           byte[] byteArray = value as byte[];
    445           // GuiLogMessage("Byte array: Filling textbox now...", NotificationLevel.Debug);
    446           if (byteArray.Length > settings.MaxLength)
    447           {
    448             AddMessage("WARNING - byte array is too large (" + (byteArray.Length / 1024).ToString("0.00") + " kB), output will be truncated to " + (settings.MaxLength / 1024).ToString("0.00") + "kB", NotificationLevel.Warning);
    449           }
    450 
    451           long size = byteArray.Length;
    452           if (size > settings.MaxLength)
    453           {
    454             size = settings.MaxLength;
    455           }
    456           byte[] sizedArray = new byte[size];
    457           for (int i = 0; i < size; i++)
    458           {
    459             sizedArray[i] = byteArray[i];
    460           }
    461           fillValue = GetStringForSelectedEncoding(sizedArray);
    462         }
    463         else
    464         {
    465             fillValue = value.ToString();
     466                fillValue = value.ToString();
     467            }
    466468        }
    467469
  • trunk/CrypPlugins/WordPatterns/Data/wordlists/WordPatterns_deutsch.txt.metainfo

    r511 r520  
    11name = WordPatterns German
     2textencoding = iso-8859-1
  • trunk/CrypPlugins/WordPatterns/WordPatterns.cs

    r511 r520  
    1919     * - add filter function (see Borland C++ tool)
    2020     * - save last input words and propose them to user
    21      * - improve dictionary input
    2221     * - improve performance
     22     * - support wildcard (*)
    2323     */
    2424    [Author("Matthäus Wander", "wander@cryptool.org", "Fachgebiet Verteilte Systeme, Universität Duisburg-Essen", "http://www.vs.uni-due.de")]
     
    7575        {
    7676            get { return outputText; }
    77             set { }
     77            private set
     78            {
     79                outputText = value;
     80                OnPropertyChanged("OutputText");
     81            }
    7882        }
    7983
     
    120124        {
    121125            if (inputText == null)
     126            {
     127                OutputText = "";
    122128                return;
     129            }
    123130
    124131            // calculate input word pattern
     
    166173                    sb.AppendLine();
    167174                }
    168                 outputText = sb.ToString();
     175                OutputText = sb.ToString();
    169176            }
    170177            else
    171178            {
    172                 outputText = null;
    173             }
    174 
    175             OnPropertyChanged("OutputText");
     179                OutputText = "";
     180            }
    176181        }
    177182
Note: See TracChangeset for help on using the changeset viewer.