Spec-Zone.ru › Elisp

Размер отображаемого текста

Поскольку ширина не всех символов одинакова, эти функции позволяют проверить ширину символа. См. Примитивы отступов и Перемещение по экранным строкам — там описаны связанные функции.

Функция: char-width char

Эта функция возвращает ширину символа char в столбцах, если бы он отображался в текущем буфере (то есть с учетом таблицы отображения буфера, если она есть; см. Таблицы отображения). Ширина символа табуляции обычно равна tab-width (см. Обычные соглашения об отображении).

Функция: char-uppercase-p char

Возвращает значение, отличное от nil, если символ char является прописным согласно Unicode. Обратите внимание, что символ считается прописным, если в стандарте Unicode определен соответствующий строчный символ.

Функция: string-width string &optional from to

Эта функция возвращает ширину строки string в столбцах, если бы она отображалась в текущем буфере и выбранном окне. Необязательные аргументы from и to задают подстроку string, которую нужно учитывать, и интерпретируются так же, как в substring (см. Создание строк).

Возвращаемое значение является приближенным: учитываются только значения, возвращаемые char-width для составляющих символов; символ табуляции всегда считается занимающим tab-width столбцов; свойства отображения и шрифты игнорируются и т. д. По этим причинам вместо нее рекомендуется использовать описанные ниже функции window-text-pixel-size или string-pixel-width.

Функция: truncate-string-to-width string width &optional start-column padding ellipsis ellipsis-text-property

Эта функция возвращает новую строку, полученную усечением string так, чтобы при отображении она занимала не более width столбцов.

Если ширина string меньше width, результат совпадает с string; в противном случае лишние символы опускаются. Если многоколоночный символ в string выходит за пределы заданной ширины width, этот символ опускается из результата. Таким образом, результат иногда может быть короче width, но не может его превышать.

Необязательный аргумент start-column задает начальный столбец; по умолчанию он равен нулю. Если он не равен nil, первые start-column столбцов строки опускаются из результата. Если один многоколоночный символ в string пересекает столбец start-column, этот символ опускается.

Необязательный аргумент padding, если он не равен nil, задает символ-заполнитель, который добавляется в начало и конец результирующей строки, чтобы ее длина составляла ровно width столбцов. Если результат короче width, символ-заполнитель добавляется в его конец столько раз, сколько нужно, чтобы достичь width. Он также добавляется в начало результата, если многоколоночный символ в string пересекает столбец start-column.

Если ellipsis не равен nil, он должен быть строкой, которая заменит конец string при усечении. В этом случае из string будет удалено больше символов, чтобы освободить достаточно места для ellipsis в пределах width столбцов. Однако если ширина отображения string меньше ширины отображения ellipsis, ellipsis не будет добавлена в результат. Если ellipsis не равен nil и не является строкой, он обозначает значение, возвращаемое описанной ниже функцией truncate-string-ellipsis.

Необязательный аргумент ellipsis-text-property, если он не равен nil, означает, что лишние части string следует скрыть с помощью свойства текста display (см. Свойство display), отображающего многоточие, вместо фактического усечения строки.

Для разрешения на уровне пикселей см. также функцию truncate-string-pixelwise.

(truncate-string-to-width "\tab\t" 12 4)
     ⇒ "ab"
(truncate-string-to-width "\tab\t" 12 4 ?\s)
     ⇒ "    ab  "

Если строка string слишком широка, эта функция использует string-width и char-width для определения подходящей точки усечения, поэтому ей присущи те же основные проблемы, что и string-width. В частности, при композиции символов внутри string ширина отображения строки может быть меньше суммы ширин составляющих ее символов, и эта функция может возвращать неточные результаты.

Функция: truncate-string-ellipsis

Эта функция возвращает строку, которая будет использоваться в качестве многоточия в truncate-string-to-width и других подобных контекстах. Это значение переменной truncate-string-ellipsis, если оно не равно nil; в противном случае — строка с единственным символом U+2026 HORIZONTAL ELLIPSIS, если этот символ можно отобразить в выбранном фрейме, и строка ‘...’ в ином случае.

Следующая функция возвращает размер текста в пикселях, как если бы он отображался в заданном окне. Эта функция используется fit-window-to-buffer и fit-frame-to-buffer (см. Изменение размеров окон), чтобы подогнать размер окна точно под содержащийся в нем текст.

Функция: window-text-pixel-size &optional window from to x-limit y-limit mode-lines ignore-line-at-end

Эта функция возвращает размеры текста буфера окна window в пикселях. window должно быть действующим окном; по умолчанию используется выбранное окно. Возвращаемое значение — пара cons, содержащая максимальную ширину любой текстовой строки в пикселях и максимальную высоту всех текстовых строк в пикселях. Эта функция предназначена для того, чтобы программы на Lisp могли подгонять размеры window под отображаемый в нем текст буфера, а также для других подобных случаев.

Возвращаемое значение может также дополнительно (см. ниже) содержать позицию в буфере первой строки, размеры которой измерялись.

Необязательный аргумент from, если он не равен nil, задает первую учитываемую позицию текста; по умолчанию это минимальная доступная позиция буфера. Если from равен t, он обозначает минимальную доступную позицию, не являющуюся символом новой строки. Если from является парой cons, ее car задает позицию в буфере, а ее cdr задает вертикальное смещение в пикселях от этой позиции до первой экранной строки, текст которой нужно измерить. (Измерение начнется с визуального начала этой экранной строки.) В этом случае возвращаемым значением будет список ширины в пикселях, высоты в пикселях и позиции в буфере первой измеренной строки. Необязательный аргумент to, если он не равен nil, задает последнюю учитываемую позицию текста; по умолчанию это максимальная доступная позиция буфера. Если to равен t, он обозначает максимальную доступную позицию, не являющуюся символом новой строки.

Необязательный аргумент x-limit, если он не равен nil, задает максимальную координату X, за пределами которой текст нужно игнорировать; следовательно, это также наибольшее значение ширины в пикселях, которое может вернуть функция. Если x-limit равен nil или не указан, используется ширина области содержимого window в пикселях (см. Размеры окон); при таком значении по умолчанию текст усеченных строк, ширина которых превышает ширину окна, игнорируется. Это значение по умолчанию полезно, если вызывающий код не собирается изменять ширину window. В противном случае вызывающий код должен указать здесь максимальную ширину области содержимого window; в частности, если ожидаются усеченные строки и нужно учитывать их текст, для x-limit следует задать большое значение. Поскольку вычисление ширины длинных строк может занять некоторое время, всегда полезно указывать для этого аргумента наименьшее необходимое значение; особенно если буфер может содержать длинные строки, которые в любом случае будут усечены.

Необязательный аргумент y-limit, если он не равен nil, задает максимальную координату Y, за пределами которой текст нужно игнорировать; следовательно, это также максимальная высота в пикселях, которую может вернуть функция. Если y-limit равен nil или не указан, учитываются все текстовые строки до позиции буфера, заданной аргументом to. Поскольку вычисление высоты в пикселях большого буфера может занять некоторое время, имеет смысл указать этот аргумент; особенно если вызывающему коду неизвестен размер буфера.

Если необязательный аргумент mode-lines равен nil или не указан, высота строки режима, строки вкладок или строки заголовка окна window не включается в возвращаемое значение. Если он равен символу mode-line, tab-line или header-line, в возвращаемое значение включается высота только этой строки, если она есть. Если он равен t, в возвращаемое значение включается высота всех этих строк, если они есть.

Необязательный аргумент ignore-line-at-end определяет, учитывать ли высоту текста в экранной строке, содержащей to, при вычислении возвращаемой высоты в пикселях. Это полезно, если программа на Lisp должна получить размеры текста до визуального начала экранной строки, содержащей to, не включая эту строку.

Функция window-text-pixel-size рассматривает текст, отображаемый в окне, целиком и не учитывает размеры отдельных строк. Следующая функция делает это.

Функция: window-lines-pixel-dimensions &optional window first last body inverse left

Эта функция вычисляет размеры в пикселях каждой строки, отображаемой в заданном окне window. Для этого она обходит текущую матрицу глифов window — матрицу, в которой хранятся глифы (см. Глифы) каждого символа буфера, отображаемого в данный момент в window. В случае успеха она возвращает список пар cons, представляющих координаты x и y нижнего правого угла последнего символа каждой строки. Координаты измеряются в пикселях от начала координат (0, 0) в верхнем левом углу window. window должно быть действующим окном; по умолчанию используется выбранное окно.

Если необязательный аргумент first является целым числом, он задает индекс (начиная с 0) первой строки матрицы глифов window, которую нужно вернуть. Обратите внимание: если у window есть строка заголовка, строка с индексом 0 — это строка заголовка. Если first равен nil, первая учитываемая строка определяется значением необязательного аргумента body: если body не равен nil, отсчет начинается с первой строки области содержимого window, при этом строка заголовка, если она есть, пропускается. В противном случае функция начинает с первой строки матрицы глифов window, которой может быть строка заголовка.

Если необязательный аргумент last является целым числом, он задает индекс последней строки матрицы глифов window, которую нужно вернуть. Если last равен nil, последняя учитываемая строка определяется значением body: если body не равен nil, используется последняя строка области содержимого window, а строка режима window, если она есть, опускается. В противном случае используется последняя строка window, которой может быть строка режима.

Если необязательный аргумент inverse равен nil, возвращаемое значение y в пикселях для каждой строки задает расстояние в пикселях от левого края (края области содержимого, если body не равен nil) window до правого края последнего глифа этой строки. Если inverse не равен nil, возвращаемое значение y в пикселях для каждой строки задает расстояние в пикселях от правого края последнего глифа этой строки до правого края (края области содержимого, если body не равен nil) window. Это полезно для определения свободного пространства в конце каждой строки.

Если необязательный аргумент left не равен nil, функция возвращает координаты x и y нижнего левого угла самого левого символа каждой строки. Это значение следует использовать для окон, в которых текст преимущественно отображается справа налево.

Если left не равен nil, а inverse равен nil, возвращаемое значение y в пикселях для каждой строки задает расстояние в пикселях от левого края последнего (самого левого) глифа этой строки до правого края (края области содержимого, если body не равен nil) window. Если оба аргумента — left и inverse — не равны nil, возвращаемое значение y в пикселях для каждой строки задает расстояние в пикселях от левого края (края области содержимого, если body не равен nil) window до левого края последнего (самого левого) глифа этой строки.

Эта функция возвращает nil, если текущая матрица глифов window не актуальна. Обычно это происходит, когда Emacs занят, например обрабатывает команду. Однако значение должно быть доступно, если вызвать эту функцию из таймера простоя с задержкой в ноль секунд.

Функция: buffer-text-pixel-size &optional buffer-or-name window x-limit y-limit

Эта функция похожа на window-text-pixel-size, но ее можно использовать, когда буфер не отображается в окне. (Когда буфер отображается в окне, функция window-text-pixel-size работает быстрее, поэтому в таком случае не следует использовать эту функцию.)

buffer-or-name должен задавать действующий буфер или имя действующего буфера; по умолчанию используется текущий буфер. window должно быть действующим окном; по умолчанию используется выбранное окно. Функция вычисляет размеры текста так, как если бы buffer отображался в window. Возвращаемое значение — пара cons, содержащая максимальную ширину любой текстовой строки в пикселях и высоту всех текстовых строк в пикселях для доступной части буфера, заданного аргументом buffer-or-name.

Необязательные аргументы x-limit и y-limit имеют то же значение, что и в window-text-pixel-size.

Если нужно измерить размеры части текста буфера, сузьте буфер до этой части перед вызовом функции (см. Сужение буфера).

Функция: string-pixel-width string &optional buffer

Это вспомогательная функция, которая использует window-text-pixel-size для вычисления ширины string в пикселях. Примечание: если вызвать эту функцию для измерения ширины строки со встроенными символами новой строки, она вернет ширину самой широкой подстроки, не содержащей символов новой строки. Это значение соответствует ширине самой длинной строки, на которую разобьется string при вставке в буфер. Если buffer не равен nil, при вычислении ширины string используются переназначения начертаний (см. Переназначение начертаний) из этого буфера.

Функция: truncate-string-pixelwise string max-pixels &optional buffer ellipsis ellipsis-pixels

Это вспомогательная функция, которая использует window-text-pixel-size для усечения string до max-pixels пикселей. Примечание: если вызвать эту функцию для измерения ширины строки со встроенными символами новой строки, она вернет ширину самой широкой подстроки, не содержащей символов новой строки. Это значение соответствует ширине самой длинной строки, на которую разобьется string при вставке в буфер. Если buffer не равен nil, при вычислении ширины string используются переназначения начертаний (см. Переназначение начертаний) из этого буфера.

Если ellipsis не равен nil, он должен быть строкой, которая заменит конец string при усечении. В этом случае из string будет удалено больше символов, чтобы освободить достаточно места для ellipsis в пределах max-pixels пикселей. Однако если ширина string в пикселях меньше ширины ellipsis в пикселях, ellipsis не будет добавлена в результат. Если ellipsis не равен nil и не является строкой, он обозначает значение, возвращаемое описанной выше функцией truncate-string-ellipsis.

Если ellipsis-pixels не равен nil, а ellipsis не равен nil, этот аргумент должен задавать количество пикселей в ellipsis, которое следует предварительно вычислить с помощью string-pixel-width, указав тот же буфер. Это полезно, если нужно усечь много строк с одинаковой строкой многоточия, чтобы не вычислять это значение повторно.

Для разрешения на уровне символов см. также функцию truncate-string-to-width.

Функция: line-pixel-height

Эта функция возвращает высоту в пикселях строки в точке в выбранном окне. Значение включает межстрочный интервал этой строки (см. Высота строки).

Функция: string-glyph-split string

При включенной композиции символов последовательности символов могут объединяться для отображения в графемные кластеры, например для отображения символов с диакритическими знаками, лигатур, эмодзи или в случаях, когда этого требует сложная обработка текста для некоторых письменностей. В таких ситуациях соответствие между символами и столбцами отображения перестает быть простым, а решения по размещению таких строк, например усечение слишком длинных строк, могут оказаться сложной задачей. Эта функция помогает решать такие задачи: она разделяет аргумент string на список подстрок, каждая из которых образует один графемный кластер, отображаемый как единое целое. Затем программы на Lisp могут использовать этот список для создания визуально корректных подстрок string, которые будут правильно выглядеть при отображении, вычисления ширины любой подстроки string путем сложения ширин составляющих ее элементов из возвращенного списка и т. д.

Например, чтобы отобразить строку без первого глифа, можно написать:

(apply #'insert (cdr (string-glyph-split string))))

Примечание: чтобы эта функция могла распознавать и обрабатывать композиции символов, должна быть включена auto-composition-mode, а текущий буфер должен отображаться в каком-либо окне.

Если буфер отображается с номерами строк (см. Настройка отображения в Руководстве по GNU Emacs), иногда полезно знать ширину, занимаемую номерами строк. Следующая функция предназначена для программ на Lisp, которым эта информация нужна при вычислении размещения.

Функция: line-number-display-width &optional pixelwise

Эта функция возвращает ширину, используемую для отображения номеров строк в выбранном окне. Если необязательный аргумент pixelwise равен символу columns, возвращаемое значение является числом с плавающей точкой и выражается в канонических столбцах фрейма; если pixelwise равен t или любому другому значению, отличному от nil, значение является целым числом и измеряется в пикселях. Если pixelwise не указан или равен nil, значение представляет собой целое число столбцов шрифта, заданного для начертания line-number, и не включает 2 столбца, используемые для отступов при отображении номеров. Если номера строк в выбранном окне не отображаются, значение равно нулю независимо от значения pixelwise. Используйте with-selected-window (см. Выбор окон), если эта информация нужна для другого окна.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Size-of-Displayed-Text.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API