All pastes #254518 Raw Edit

Miscellany

public text v1 · immutable
#254518 ·published 2006-11-21 23:14 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.IO;
using System.Text.RegularExpressions;

namespace Server
{
    public class ClilocTranslator
    {
        private static byte[] m_Buffer = new byte[1024];
        private static Dictionary<int, ClilocStringEntry> clilocStringList;
        private static string language = "enu";
        private static string clientPath = "D:\\Program\\Ultima Online 2D\\";

        public static void Start()
        {
            if (language == null || language == "")
                language = "enu";

            //TODO: Fix this like the SDK
            string path = string.Format("{0}cliloc.{1}", ClilocTranslator.clientPath, language);

            clilocStringList = new Dictionary<int, ClilocStringEntry>();

            #region Ultima SDK code + mod
            using (BinaryReader bin = new BinaryReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
            {
                bin.ReadInt32();
                bin.ReadInt16();

                while (bin.PeekChar() != -1)
                {
                    int number = bin.ReadInt32();

                    bin.ReadByte();
                    int length = bin.ReadInt16();

                    if (length > m_Buffer.Length)
                        m_Buffer = new byte[(length + 1023) & ~1023];

                    bin.Read(m_Buffer, 0, length);

                    clilocStringList[number] = new ClilocStringEntry(Encoding.UTF8.GetString(m_Buffer, 0, length));
                }
            }
            #endregion
        }

        public static string GetString(int number, bool plural)
        {
            if (plural)
                return ClilocTranslator.clilocStringList[number].Plural;
            else
                return ClilocTranslator.clilocStringList[number].Singular;
        }

        public static string GetString(int number)
        {
            return ClilocTranslator.clilocStringList[number].Singular;
        }

    }

    public class ClilocStringEntry
    {
        string singular;
        string plural;

        public string Singular
        {
            get { return singular; }
            set { singular = value; }
        }

        public string Plural
        {
            get { return plural; }
            set { plural = value; }
        }

        public ClilocStringEntry(string clilocString)
        {
            if (clilocString.Contains("~"))
                clilocString = FormatVars(clilocString);

            this.singular = clilocString.ToLower();

            if ((this.singular.Length - 1) >= 0 && this.singular[singular.Length - 1] != 's')
                this.plural = this.singular + "s";
            else
                this.plural = this.singular;
        }

        public string FormatVars(string text)
        {
            Regex r = new Regex("~(.+?)~");
            MatchCollection mC = r.Matches(text);

            for (int i = 0; i < mC.Count; i++)
                text = text.Replace(mC[i].ToString(), string.Format("{{0}}", i));

            return text;
        }
    }

}