28 if (filenames.empty()) {
32 std::string path =
".";
33 for (std::string filename : filenames) {
34 if (!filename.empty() && filename[0] ==
'/') {
36 }
else if (
existFile(path +
"/" + filename)) {
37 path =
dirName(path +
"/" + filename);
45 return path +
"/" +
baseName(filenames.back());
53 if (filename < otherFilename) {
57 if (filename > otherFilename) {
60 if (
start < other.start) {
63 if (
start > other.start) {
66 if (
end < other.end) {
89 std::ifstream in(filename);
94 in.ignore(std::numeric_limits<std::streamsize>::max(),
'\n');
99 bool prevWhitespace =
false;
100 bool afterFirstNonSpace =
false;
101 while ((c = in.get()) !=
'\n' && c != EOF) {
107 if (std::isspace(c) != 0) {
108 if (afterFirstNonSpace && prevWhitespace && offsetColumn >= lineLen) {
111 prevWhitespace =
true;
113 prevWhitespace =
false;
114 afterFirstNonSpace =
true;
120 for (
int i = 1;
i <= lineLen;
i++) {
121 char ch = (
i == offsetColumn) ?
'^' :
'-';