You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
4.4 KiB
C#

9 months ago
namespace com.azkoss.excellite
{
using System;
using System.IO;
using System.Text;
internal class ExcelStringBase : BinaryWritable
{
// Methods
public ExcelStringBase()
{
}
public ExcelStringBase(string str)
{
this.Str = str;
this.Options = ExcelStringOptions.Uncompressed;
}
public override bool Equals(object obj)
{
ExcelLongString text1 = (ExcelLongString) obj;
if (this.Str == text1.Str)
{
return (this.Options == text1.Options);
}
return false;
}
public string GetFormattedStr()
{
StringBuilder builder1 = new StringBuilder(this.Str);
for (int num1 = 0; num1 < builder1.Length; num1++)
{
char ch1 = builder1[num1];
if (!char.IsLetterOrDigit(ch1) && (ch1 != ' '))
{
builder1[num1] = 'X';
}
}
return builder1.ToString();
}
public override int GetHashCode()
{
return (this.Str.GetHashCode() ^ this.Options.GetHashCode());
}
protected void ReadOptionsAndString(BinaryReader br, ref int remainingSize, ref int charsRemaining)
{
int num1;
ushort num2;
uint num3;
this.Options = (ExcelStringOptions) br.ReadByte();
remainingSize -= 1;
if ((this.Options & ExcelStringOptions.RichText) != ((ExcelStringOptions) ((byte) 0)))
{
num2 = br.ReadUInt16();
remainingSize -= 2;
}
else
{
num2 = 0;
}
if ((this.Options & ExcelStringOptions.AsianPhonetic) != ((ExcelStringOptions) ((byte) 0)))
{
num3 = br.ReadUInt32();
remainingSize -= 4;
}
else
{
num3 = 0;
}
char[] chArray1 = new char[charsRemaining];
if ((this.Options & ExcelStringOptions.Uncompressed) != ((ExcelStringOptions) ((byte) 0)))
{
for (num1 = 0; (charsRemaining > 0) && (remainingSize > 0); num1++)
{
chArray1[num1] = br.ReadChar();
remainingSize -= 2;
charsRemaining -= 1;
}
}
else
{
for (num1 = 0; (charsRemaining > 0) && (remainingSize > 0); num1++)
{
chArray1[num1] = (char) br.ReadByte();
remainingSize -= 1;
charsRemaining -= 1;
}
}
this.Str = new string(chArray1, 0, chArray1.Length - charsRemaining);
num1 = 0;
while ((num1 < num2) && (remainingSize > 0))
{
br.ReadUInt32();
remainingSize -= 4;
num1++;
}
for (num1 = 0; (num1 < num3) && (remainingSize > 0); num1++)
{
br.ReadByte();
remainingSize -= 1;
}
}
public override void Write(BinaryWriter bw)
{
string text1;
int num1;
bw.Write((byte) this.Options);
if ((this.Options & ExcelStringOptions.Uncompressed) != ((ExcelStringOptions) ((byte) 0)))
{
text1 = this.Str;
for (num1 = 0; num1 < text1.Length; num1++)
{
char ch1 = text1[num1];
bw.Write(ch1);
}
}
else
{
text1 = this.Str;
for (num1 = 0; num1 < text1.Length; num1++)
{
char ch2 = text1[num1];
bw.Write((byte) ch2);
}
}
}
// Properties
public override int Size
{
get
{
int num1 = 1;
if ((this.Options & ExcelStringOptions.Uncompressed) != ((ExcelStringOptions) ((byte) 0)))
{
return (num1 + (this.Str.Length * 2));
}
return (num1 + this.Str.Length);
}
}
// Fields
public ExcelStringOptions Options;
public string Str;
}
}