private void Reader_EcondingChanged(object sender, Encoding enc) { lock (lockObject) { fullUpdate = true; } EcondingChanged?.Invoke(this, enc); }
public virtual LineRange ReadRange(long position, Origin origin, int maxPrev, int maxNext, int maxPrevExt, int maxNextExt, LineRange currentState = null) { Stream stream = null; try { int cp = CurEncoding.CodePage; stream = GetStream(); if (stream == null) { HandleStreamUnavailable(); return(new LineRange()); } LineReader lineReader = new LineReader(stream, GetEncoding(stream)); if (origin == Origin.End) { position = stream.Length + position; if (position < 0) { position = 0; } } Line curLine = null; List <Line> prev = new List <Line>(); List <Line> next = new List <Line>(); List <Extent> prevExtent = new List <Extent>(); List <Extent> nextExtent = new List <Extent>(); Action <RawLine> feedDetector = (line) => { if (line != null) { FeedDetector(line, lineReader); } }; curLine = ReadRange(lineReader, position, maxPrev, maxNext, maxPrevExt, maxNextExt, prev, next, prevExtent, nextExtent, currentState, feedDetector); int enc = CurEncoding.CodePage; //foreach (Line line in prev) //{ // FeedDetector(line, lineReader); //} //if (curLine != null) FeedDetector(curLine, lineReader); //foreach (Line line in next) //{ // FeedDetector(line, lineReader); //} if (CurEncoding.CodePage != enc) { // Read line again with new encoding lineReader = new LineReader(stream, CurEncoding); curLine = ReadRange(lineReader, position, maxPrev, maxNext, maxPrevExt, maxNextExt, prev, next, prevExtent, nextExtent); } if (CurEncoding.CodePage != cp) { EcondingChanged?.Invoke(this, CurEncoding); } LineRange lineRange = new LineRange(curLine, prev.ConvertAll <Line>(l => (Line)l), next.ConvertAll <Line>(l => (Line)l), prevExtent, nextExtent, lineReader.StreamLength); CloseStream(stream); return(lineRange); } catch (Exception e) { HandleError(stream, e); return(new LineRange()); } }