Files
ZuneShell.dll/UIX/SSVParseLib/SSLexConsumer.cs
T

111 lines
3.3 KiB
C#
Raw Normal View History

// Decompiled with JetBrains decompiler
// Type: SSVParseLib.SSLexConsumer
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
// Assembly location: C:\Program Files\Zune\UIX.dll
namespace SSVParseLib
{
internal abstract class SSLexConsumer
{
private int m_docOriginLine;
private int m_docOriginColumn;
private int m_line;
private int m_start;
protected int m_index;
private int m_offset;
public char m_current;
private int m_scanLine;
private int m_scanOffset;
public int m_bufferLexemeStart;
private char m_bof;
private bool m_endOfData;
public abstract bool getNext();
public abstract string getSubstring(int start, int length);
public bool next()
{
2021-04-02 19:10:51 -05:00
if (m_endOfData)
return false;
2021-04-02 19:10:51 -05:00
if ((m_current = m_bof) != char.MinValue)
{
2021-04-02 19:10:51 -05:00
m_bof = char.MinValue;
return true;
}
2021-04-02 19:10:51 -05:00
if (!getNext())
{
2021-04-02 19:10:51 -05:00
++m_index;
m_endOfData = true;
return false;
}
2021-04-02 19:10:51 -05:00
++m_index;
if (m_current == '\n')
{
2021-04-02 19:10:51 -05:00
++m_scanLine;
m_scanOffset = 1;
}
else
2021-04-02 19:10:51 -05:00
++m_scanOffset;
return true;
}
2021-04-02 19:10:51 -05:00
public int line() => m_docOriginLine + m_line;
2021-04-02 19:10:51 -05:00
public int offset() => m_line != 0 ? m_offset : m_docOriginColumn + m_offset;
2021-04-02 19:10:51 -05:00
public char getCurrent() => m_current;
2021-04-02 19:10:51 -05:00
public SSLexMark mark() => new SSLexMark(m_scanLine, m_scanOffset, m_index);
public void flushEndOfLine(ref SSLexMark? q_mark)
{
SSLexMark ssLexMark = new SSLexMark(q_mark.Value.m_line - 1, q_mark.Value.m_offset, q_mark.Value.m_index - 1);
q_mark = new SSLexMark?(ssLexMark);
}
public void flushStartOfLine(ref SSLexMark? q_mark)
{
2021-04-02 19:10:51 -05:00
++m_line;
++m_start;
SSLexMark ssLexMark = new SSLexMark(q_mark.Value.m_line - 1, q_mark.Value.m_offset, q_mark.Value.m_index);
q_mark = new SSLexMark?(ssLexMark);
2021-04-02 19:10:51 -05:00
m_offset = 1;
}
public virtual void flushLexeme(SSLexMark q_mark)
{
2021-04-02 19:10:51 -05:00
m_start = m_index = q_mark.m_index;
m_line += q_mark.m_line;
m_offset = q_mark.m_offset;
m_scanLine = 0;
m_scanOffset = q_mark.m_offset;
m_bufferLexemeStart = m_index;
}
public void flushLexeme()
{
2021-04-02 19:10:51 -05:00
m_start = m_index;
m_line += m_scanLine;
m_offset = m_scanOffset;
m_scanLine = 0;
m_bufferLexemeStart = m_index;
}
2021-04-02 19:10:51 -05:00
public int lexemeLength() => m_index - m_start;
2021-04-02 19:10:51 -05:00
public int lexemeLength(SSLexMark q_mark) => q_mark.index() - m_start;
2021-04-02 19:10:51 -05:00
public string lexemeBuffer() => getSubstring(m_bufferLexemeStart, lexemeLength());
2021-04-02 19:10:51 -05:00
public string lexemeBuffer(SSLexMark q_mark) => getSubstring(m_bufferLexemeStart, lexemeLength(q_mark));
public void SetDocumentOffset(int line, int column)
{
2021-04-02 19:10:51 -05:00
m_docOriginLine = line;
m_docOriginColumn = column;
}
}
}