From 0d952e6cab7106ecf94a848f7261a3441ea2b241 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Thu, 1 Jan 2015 15:08:58 +0100 Subject: Replaced TextCursor with Location header --- src/core/common/Location.hpp | 182 +++++++++++++++++++++++++++++++++++++++++ src/core/common/TextCursor.hpp | 168 ------------------------------------- 2 files changed, 182 insertions(+), 168 deletions(-) create mode 100644 src/core/common/Location.hpp delete mode 100644 src/core/common/TextCursor.hpp (limited to 'src/core') diff --git a/src/core/common/Location.hpp b/src/core/common/Location.hpp new file mode 100644 index 0000000..0dd359d --- /dev/null +++ b/src/core/common/Location.hpp @@ -0,0 +1,182 @@ +/* + Ousía + Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _OUSIA_LOCATION_HPP_ +#define _OUSIA_LOCATION_HPP_ + +namespace ousia { + +/** + * Struct representing a location within a source file. A position is defined by + * a byte offset (which is always reproducable), a line number and a column + * number (which may differ depending on the encoding used). + */ +struct SourceLocation { + /** + * Current line, starting with one. + */ + int line; + + /** + * Current column, starting with one. + */ + int column; + + /** + * Current byte offset. + */ + size_t offs; + + /** + * Default constructor of the SourceLocation struct, initializes all + * memebers with zero. + */ + SourceLocation() : line(0), column(0), offs(0) {} + + /** + * Creates a new SourceLocation struct with only a line and no column. + * + * @param line is the line number. + * @param column is the column number. + */ + SourceLocation(int line) : line(line), column(0), offs(0) {} + + /** + * Creates a new SourceLocation struct with a line and column. + * + * @param line is the line number. + * @param column is the column number. + */ + SourceLocation(int line, int column) : line(line), column(column), offs(0) + { + } + + /** + * Creates a new SourceLocation struct with a line, column and byte offset. + * + * @param line is the line number. + * @param column is the column number. + * @param offs is the byte offset. + */ + SourceLocation(int line, int column, size_t offs) + : line(line), column(column), offs(offs) + { + } + + /** + * Returns true, if the line number is valid, false otherwise. + * + * @return true for valid line numbers. + */ + bool hasLine() const { return line > 0; } + + /** + * Returns true, if the column number is valid, false otherwise. + * + * @return true for valid column numbers. + */ + bool hasColumn() const { return column > 0; } + + /** + * Returns true, if the position is valid, false otherwise. This function is + * equivalent to the hasLine() function. + * + * @return true if the Position struct is valid. + */ + bool valid() const { return hasLine(); } +}; + +/** + * Represents the context of a SourceLocation instance. Used to build error + * messages. + */ +struct SourceContext { + /** + * Set to the content of the current line. + */ + std::string text; + + /** + * Relative position (in characters) within that line. May point to + * locations beyond the text content. + */ + int relPos; + + /** + * Set to true if the beginning of the line has been truncated (because + * the reader position is too far away from the actual position of the + * line). + */ + bool truncatedStart; + + /** + * Set to true if the end of the line has been truncated (because the + * reader position is too far away from the actual end position of the + * line. + */ + bool truncatedEnd; + + /** + * Default constructor, initializes all members with zero values. + */ + SourceContext() + : text(), relPos(0), truncatedStart(false), truncatedEnd(false) + { + } + + /** + * Constructor of the SourceContext class. + * + * @param text is the current line the text cursor is at. + * @param relPos is the relative position of the text cursor within that + * line. + * @param truncatedStart specifies whether the text was truncated at the + * beginning. + * @param truncatedEnd specifies whether the text was truncated at the + * end. + */ + SourceContext(std::string text, size_t relPos, bool truncatedStart, + bool truncatedEnd) + : text(std::move(text)), + relPos(relPos), + truncatedStart(truncatedStart), + truncatedEnd(truncatedEnd) + { + } + + /** + * Returns true the context text is not empty. + * + * @return true if the context is valid and e.g. should be printed. + */ + bool valid() const { return !text.empty(); } +}; + +/** + * Callback used to lookup the context corresponding to the given source + * location. + * + * @param location is the location for which the context should be looked up. + * @param data is used defined data associated with the callback. + */ +using SourceContextCallback = SourceContext (*)(const SourceLocation &location, + void *data); +} + +#endif /* _OUSIA_LOCATION_HPP_ */ + diff --git a/src/core/common/TextCursor.hpp b/src/core/common/TextCursor.hpp deleted file mode 100644 index 2633345..0000000 --- a/src/core/common/TextCursor.hpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - Ousía - Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef _OUSIA_TEXT_CURSOR_HPP_ -#define _OUSIA_TEXT_CURSOR_HPP_ - -namespace ousia { -namespace TextCursor { - -/** - * Type used for representing line or column positions. - */ -using PosType = unsigned int; - -/** - * Struct representing a position within the text. A position is defined by a - * byte offset (which is always reproducable), a line number and a column - * number. - */ -struct Position { - /** - * Current line, starting with one. - */ - PosType line; - - /** - * Current column, starting with one. - */ - PosType column; - - /** - * Current byte offset. - */ - size_t offs; - - /** - * Default constructor of the Position struct, initializes all memebers - * with zero. - */ - Position() : line(0), column(0), offs(0) {} - - /** - * Creates a new Position struct with only a line and no column. - * - * @param line is the line number. - * @param column is the column number. - */ - Position(PosType line) : line(line), column(0), offs(0) {} - - /** - * Creates a new Position struct with a line and column. - * - * @param line is the line number. - * @param column is the column number. - */ - Position(PosType line, PosType column) : line(line), column(column), offs(0) - { - } - - /** - * Creates a new Position struct with a line, column and byte offset. - * - * @param line is the line number. - * @param column is the column number. - * @param offs is the byte offset. - */ - Position(PosType line, PosType column, size_t offs) - : line(line), column(column), offs(offs) - { - } - - /** - * Returns true, if the line number is valid, false otherwise. - * - * @return true for valid line numbers. - */ - bool hasLine() const { return line > 0; } - - /** - * Returns true, if the column number is valid, false otherwise. - * - * @return true for valid column numbers. - */ - bool hasColumn() const { return column > 0; } -}; - -/** - * Represents the current context a CharReader is in. Used for building error - * messages. - */ -struct Context { - /** - * Set to the content of the current line. - */ - std::string text; - - /** - * Relative position (in characters) within that line. May point to - * locations beyond the text content. - */ - PosType relPos; - - /** - * Set to true if the beginning of the line has been truncated (because - * the reader position is too far away from the actual position of the - * line). - */ - bool truncatedStart; - - /** - * Set to true if the end of the line has been truncated (because the - * reader position is too far away from the actual end position of the - * line. - */ - bool truncatedEnd; - - /** - * Default constructor, initializes all members with zero values. - */ - Context() : text(), relPos(0), truncatedStart(false), truncatedEnd(false) {} - - /** - * Constructor of the Context class. - * - * @param text is the current line the text cursor is at. - * @param relPos is the relative position of the text cursor within that - * line. - * @param truncatedStart specifies whether the text was truncated at the - * beginning. - * @param truncatedEnd specifies whether the text was truncated at the - * end. - */ - Context(std::string text, size_t relPos, bool truncatedStart, - bool truncatedEnd) - : text(std::move(text)), - relPos(relPos), - truncatedStart(truncatedStart), - truncatedEnd(truncatedEnd) - { - } - - /** - * Returns true the context text is not empty. - * - * @return true if the context is valid and e.g. should be printed. - */ - bool valid() const { return !text.empty(); } -}; -} -} - -#endif /* _OUSIA_TEXT_CURSOR_HPP_ */ - -- cgit v1.2.3