Определить системную длину табуляции - PullRequest
0 голосов
/ 27 ноября 2018

Моя проблема : я пытаюсь обработать содержимое файла, чтобы найти ошибки, как это делает компилятор (технически я делаю компилятор, но это небольшая деталь).Мне нужно знать длину табуляции в данной системе или платформе, чтобы правильно рассчитать столбец символов.Однако, куда бы я ни посмотрел, я не смог определить длину остановки табуляции системы.Как я могу получить это, это вообще возможно, или это 8 в каждой системе?

Я не хочу предполагать, что табуляция каждые 8 ​​символов, потому что это кажется различным для каждой системы, и этодаже настраивается на большинстве систем.И я понимаю, что редакторы обычно определяют длину табуляции, но компиляторы этого не делают и не могут использовать редактор для определения длины табуляции.Итак ... что, черт возьми, мне делать?

РЕДАКТИРОВАТЬ : Так что, если нет простого или фактического надежного способа определить, как долго будет длиться вкладка (кроме произвольной догадки) есть ли интуитивно понятный способ определения этой длины, чтобы она была точной в 50% случаев или более?

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Полагаю, в этот момент я должен ответить на свой вопрос с чем-то разумным.Спасибо @ZDF и @Swordfish за ваши комментарии.

Мое решение:

  • Предоставить опцию компилятора для настройки длины табуляции.
  • Если не определено пользователем, используйте длину, которая будет значением по умолчанию для компилятора, и всякий раз, когда компилятору нужно что-то напечатать, заменяйте табуляцию таким количеством пробелов.

В этой системе,У меня может быть точный подсчет столбцов, даже если он не отражает файл пользователя должным образом.

0 голосов
/ 27 ноября 2018

По моему мнению, вы должны (а) предположить, что табуляторы вводятся каждые 8 ​​пробелов и (б) даже не тратить время на настройку этой конфигурации.

Да, есть люди, которым нравятся отступы, кратныекроме 8 пробелов.Да, есть текстовые редакторы, которые позволяют вам устанавливать табуляторы не на 8 пробелов.Но (опять же, на мой взгляд), ни один из этих фактов не меняет интерпретацию символа \t.Если кто-то хочет сделать отступ в 18 пробелов, он (и / или их текстовый редактор) может добиться этого, вставив 18 пробелов, или две пробелы и два пробела (или, может быть, даже одну пробел и 10 пробелов).Но они должны , а не пойти и вставить две вкладки, и объявить, что это вкладки с 9 пробелами, или что-то в этом роде.

Так что если вы пишете свой код, который предполагает вкладки с 8 пробелами, иесли кто-то, кто считает, что он «перенастроил» \t, обнаружит, что ваш код не разделяет (и не может) разделяет это убеждение, может быть - может быть, просто - вы поможете убедить этого человека в глупости его убеждений,(Конечно, это не поможет. Но мы всегда можем надеяться.)

(Но, да, это старые и яркие дебаты, которые, вероятно, никогда не будут разрешены к удовлетворению всех.)

0 голосов
/ 27 ноября 2018

Я думаю, вы неправильно понимаете, как работают вкладки.Вкладка не равна числу пробелов «x», где «x» уникально для платформы.Вкладка равна вкладке.Они принципиально разные.Для обработки вкладки используется символ «\ t».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...