rich

Форк
0
/
snippets.py 
179 строк · 11.0 Кб
1
PYTHON_SNIPPET = '''
2
def layout_resolve(total: int, edges: Sequence[EdgeProtocol]) -> List[int]:
3
    """Divide total space to satisfy size, fraction, and min_size, constraints.
4

5
    The returned list of integers should add up to total in most cases, unless it is
6
    impossible to satisfy all the constraints. For instance, if there are two edges
7
    with a minimum size of 20 each and `total` is 30 then the returned list will be
8
    greater than total. In practice, this would mean that a Layout object would
9
    clip the rows that would overflow the screen height.
10

11
    Args:
12
        total (int): Total number of characters.
13
        edges (Sequence[Edge]): Edges within total space.
14

15
    Returns:
16
        list[int]: Number of characters for each edge.
17
    """
18
    # Size of edge or None for yet to be determined
19
    sizes = [(edge.size or None) for edge in edges]
20

21
    if None not in sizes:
22
        # No flexible edges
23
        return cast("list[int]", sizes)
24

25
    # Get flexible edges and index to map these back on to sizes list
26
    flexible_edges = [
27
        (index, edge)
28
        for index, (size, edge) in enumerate(zip(sizes, edges))
29
        if size is None
30
    ]
31
    # Remaining space in total
32
    remaining = total - sum([size or 0 for size in sizes])
33
    if remaining <= 0:
34
        # No room for flexible edges
35
        return [
36
            ((edge.min_size or 1) if size is None else size)
37
            for size, edge in zip(sizes, edges)
38
        ]
39

40
    # Get the total fraction value for all flexible edges
41
    total_flexible = sum([(edge.fraction or 1) for _, edge in flexible_edges])
42
    while flexible_edges:
43
        # Calculate number of characters in a ratio portion
44
        portion = Fraction(remaining, total_flexible)
45

46
        # If any edges will be less than their minimum, replace size with the minimum
47
        for flexible_index, (index, edge) in enumerate(flexible_edges):
48
            if portion * edge.fraction < edge.min_size:
49
                # This flexible edge will be smaller than its minimum size
50
                # We need to fix the size and redistribute the outstanding space
51
                sizes[index] = edge.min_size
52
                remaining -= edge.min_size
53
                total_flexible -= edge.fraction or 1
54
                del flexible_edges[flexible_index]
55
                # New fixed size will invalidate calculations, so we need to repeat the process
56
                break
57
        else:
58
            # Distribute flexible space and compensate for rounding error
59
            # Since edge sizes can only be integers we need to add the remainder
60
            # to the following line
61
            remainder = Fraction(0)
62
            for index, edge in flexible_edges:
63
                sizes[index], remainder = divmod(portion * edge.fraction + remainder, 1)
64
            break
65

66
    # Sizes now contains integers only
67
    return cast("list[int]", sizes)
68
'''
69

70
PYTHON_DICT = {
71
    "glossary": {
72
        "title": "example glossary",
73
        "GlossDiv": {
74
            "title": "S",
75
            "GlossList": {
76
                "GlossEntry": {
77
                    "ID": "SGML",
78
                    "SortAs": "SGML",
79
                    "GlossTerm": "Standard Generalized Markup Language",
80
                    "Acronym": "SGML",
81
                    "Abbrev": "ISO 8879:1986",
82
                    "GlossDef": {
83
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
84
                        "GlossSeeAlso": ["GML", "XML"],
85
                    },
86
                    "GlossSee": "markup",
87
                }
88
            },
89
        },
90
    }
91
}
92

93
LOREM_IPSUM = """
94
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Laoreet id donec ultrices tincidunt arcu. Eu facilisis sed odio morbi quis commodo odio aenean sed. Amet cursus sit amet dictum. Gravida rutrum quisque non tellus. Semper auctor neque vitae tempus quam pellentesque nec nam. Mauris sit amet massa vitae tortor condimentum lacinia quis. Adipiscing elit ut aliquam purus sit amet luctus venenatis lectus. Consectetur adipiscing elit ut aliquam purus sit amet. Sit amet mauris commodo quis imperdiet massa tincidunt nunc pulvinar. Dui faucibus in ornare quam viverra. Et netus et malesuada fames ac turpis. A lacus vestibulum sed arcu non odio euismod. In massa tempor nec feugiat nisl pretium fusce.
95

96
Tellus in hac habitasse platea dictumst vestibulum. Feugiat nibh sed pulvinar proin. In cursus turpis massa tincidunt dui ut. Fermentum posuere urna nec tincidunt praesent semper feugiat. Interdum consectetur libero id faucibus. Habitant morbi tristique senectus et netus et malesuada fames ac. Facilisis leo vel fringilla est ullamcorper eget nulla facilisi. Aliquam faucibus purus in massa tempor. Tellus pellentesque eu tincidunt tortor aliquam nulla. Sem et tortor consequat id porta nibh. Massa id neque aliquam vestibulum morbi blandit cursus risus. Ut placerat orci nulla pellentesque dignissim enim. Nibh tellus molestie nunc non blandit massa enim nec dui. Ipsum a arcu cursus vitae congue mauris rhoncus aenean vel. Egestas congue quisque egestas diam in.
97

98
Pulvinar mattis nunc sed blandit libero volutpat sed. Accumsan in nisl nisi scelerisque eu. Eget aliquet nibh praesent tristique. Ipsum suspendisse ultrices gravida dictum fusce ut. Non sodales neque sodales ut etiam sit amet. Velit egestas dui id ornare. Massa ultricies mi quis hendrerit dolor magna. Id volutpat lacus laoreet non curabitur gravida arcu. Nulla facilisi cras fermentum odio eu feugiat pretium. Sed vulputate odio ut enim blandit volutpat. Amet massa vitae tortor condimentum lacinia. Tellus integer feugiat scelerisque varius. Quam nulla porttitor massa id. Facilisi cras fermentum odio eu feugiat pretium nibh ipsum. Eget nunc scelerisque viverra mauris in aliquam sem fringilla. Amet nulla facilisi morbi tempus iaculis urna id volutpat lacus. Facilisi etiam dignissim diam quis enim lobortis.
99

100
Nullam vehicula ipsum a arcu cursus vitae congue mauris rhoncus. Ullamcorper a lacus vestibulum sed arcu non. Suscipit adipiscing bibendum est ultricies integer quis auctor elit. Integer feugiat scelerisque varius morbi enim. Posuere urna nec tincidunt praesent semper feugiat nibh sed pulvinar. Lobortis feugiat vivamus at augue eget. Rhoncus dolor purus non enim praesent. Mi in nulla posuere sollicitudin aliquam ultrices sagittis orci. Mollis aliquam ut porttitor leo. Id cursus metus aliquam eleifend mi in nulla. Integer eget aliquet nibh praesent tristique magna sit amet. Egestas maecenas pharetra convallis posuere morbi.
101

102
Blandit massa enim nec dui. Suscipit tellus mauris a diam maecenas. Sed id semper risus in. Purus faucibus ornare suspendisse sed nisi lacus. At in tellus integer feugiat. Egestas diam in arcu cursus euismod quis viverra nibh cras. Enim tortor at auctor urna nunc id. Tristique nulla aliquet enim tortor at auctor urna nunc id. Purus gravida quis blandit turpis cursus in hac habitasse platea. Ac turpis egestas integer eget. Tortor at auctor urna nunc. Neque aliquam vestibulum morbi blandit cursus. Massa tempor nec feugiat nisl pretium fusce id velit. Interdum consectetur libero id faucibus nisl tincidunt. Adipiscing diam donec adipiscing tristique risus nec feugiat in. Egestas integer eget aliquet nibh praesent tristique magna sit.
103
"""
104

105
UNICODE_HEAVY_TEXT = """
106
Richは、 _リッチ_ なテキストや美しい書式設定をターミナルで行うためのPythonライブラリです。
107

108
[Rich API](https://rich.readthedocs.io/en/latest/)を使用すると、ターミナルの出力に色やスタイルを簡単に追加することができます。 Richはきれいなテーブル、プログレスバー、マークダウン、シンタックスハイライトされたソースコード、トレースバックなどをすぐに生成・表示することもできます。
109

110
![機能](https://github.com/textualize/rich/raw/master/imgs/features.png)
111

112
Richの紹介動画はこちらをご覧ください。 [calmcode.io](https://calmcode.io/rich/introduction.html) by [@fishnets88](https://twitter.com/fishnets88).
113

114
[Richについての人々の感想を見る。](https://www.willmcgugan.com/blog/pages/post/rich-tweets/)
115

116
## 互換性
117

118
RichはLinux、OSX、Windowsに対応しています。True colorと絵文字は新しい Windows ターミナルで動作しますが、古いターミナルでは8色に制限されています。Richを使用するにはPythonのバージョンは3.6.3以降が必要です。
119

120
Richは追加の設定を行わずとも、[Jupyter notebooks](https://jupyter.org/)で動作します。
121

122
## インストール
123

124
`pip` や、あなたのお気に入りのPyPIパッケージマネージャを使ってインストールしてください。
125

126
```sh
127
python -m pip install rich
128
```
129

130
以下のコマンドを実行して、ターミナルでリッチの出力をテストできます:
131

132
```sh
133
python -m rich
134
```
135

136
## Richのprint関数
137

138
簡単にリッチな出力をアプリケーションに追加するには、Pythonの組み込み関数と同じ名前を持つ [rich print](https://rich.readthedocs.io/en/latest/introduction.html#quick-start) メソッドをインポートすることで実現できます。こちらを試してみてください:
139

140
```python
141
from rich import print
142

143
print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())
144
```
145

146
![Hello World](https://github.com/textualize/rich/raw/master/imgs/print.png)
147

148
## Rich REPL
149

150
RichはPythonのREPLでインストールすることができ、データ構造がきれいに表示され、ハイライトされます。
151

152
```python
153
>>> from rich import pretty
154
>>> pretty.install()
155
```
156

157
![REPL](https://github.com/textualize/rich/raw/master/imgs/repl.png)
158

159
## Rich Inspect
160

161
RichにはPythonオブジェクトやクラス、インスタンス、組み込み関数などに関するレポートを作成することができる、[inspect関数](https://rich.readthedocs.io/en/latest/reference/init.html?highlight=inspect#rich.inspect)があります。
162

163
の使い方
164

165
リッチなターミナルコンテンツをより制御していくには、[Console](https://rich.readthedocs.io/en/latest/reference/console.html#rich.console.Console) オブジェクトをインポートして構築していきます。
166

167
Console オブジェクトには `print` メソッドがあり、これは組み込み関数の `print` と意図的に似たインターフェイスを持っています。
168
以下に使用例を示します:
169

170
あなたが予想した通り、これは `"Hello World!"` をターミナルに表示します。組み込み関数の `print` とは異なり、Rich はターミナルの幅に合わせてテキストをワードラップすることに注意してください。
171

172
出力結果に色やスタイルを追加する方法はいくつかあります。キーワード引数に `style` を追加することで、出力結果全体のスタイルを設定することができます。以下に例を示します:
173
"""
174

175

176
MARKUP = "\n".join(
177
    """[bold]Hello [i]World[/i] [bold magenta]foo [i]bar[/i] baz[/] [blue u]https://textualize.io[/]"""
178
    for _ in range(20)
179
)
180

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.