Spaces:
Runtime error
Runtime error
# `gradio_highlightedcode` | |
<a href="https://pypi.org/project/gradio_highlightedcode/" target="_blank"><img alt="PyPI - Version" src="https://img.shields.io/pypi/v/gradio_highlightedcode"></a> | |
A variant of the Code component that supports highlighting lines of code. | |
## Installation | |
```bash | |
pip install gradio_highlightedcode | |
``` | |
## Usage | |
```python | |
import time | |
import gradio as gr | |
from gradio_highlightedcode import HighlightedCode | |
example = HighlightedCode().example_inputs() | |
initial_value = """import random | |
def scramble_name(name): | |
name_list = list(name) | |
""" | |
completion = """ random.shuffle(name_list) | |
return ''.join(name_list) | |
# Example usage: | |
print(scramble_name("Python")) | |
""" | |
def generate_code(): | |
for i in range(len(completion)): | |
time.sleep(0.03) | |
yield HighlightedCode(initial_value + completion[:i], highlights=[(5, "rgb(255 254 213)")]) | |
with gr.Blocks() as demo: | |
code = HighlightedCode(initial_value, language="python") | |
btn = gr.Button("Generate", variant="primary") | |
btn.click(generate_code, outputs=code) | |
if __name__ == "__main__": | |
demo.launch() | |
``` | |
## `HighlightedCode` | |
### Initialization | |
<table> | |
<thead> | |
<tr> | |
<th align="left">name</th> | |
<th align="left" style="width: 25%;">type</th> | |
<th align="left">default</th> | |
<th align="left">description</th> | |
</tr> | |
</thead> | |
<tbody> | |
<tr> | |
<td align="left"><code>value</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
str | tuple[str] | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">Default value to show in the code editor. If callable, the function will be called whenever the app loads to set the initial value of the component.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>language</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
typing.Optional[ | |
typing.Literal[ | |
"python", | |
"markdown", | |
"json", | |
"html", | |
"css", | |
"javascript", | |
"typescript", | |
"yaml", | |
"dockerfile", | |
"shell", | |
"r", | |
] | |
][ | |
"python" | |
| "markdown" | |
| "json" | |
| "html" | |
| "css" | |
| "javascript" | |
| "typescript" | |
| "yaml" | |
| "dockerfile" | |
| "shell" | |
| "r", | |
None, | |
] | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">The language to display the code as. Supported languages listed in `gr.Code.languages`.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>highlights</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
list[tuple[int, str]] | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">A list of tuples indicating lines to highlight. The first element of the tuple is the starting line number (1-indexed) and the second element is the highlight color (as a CSS hex string). The highlights are applied in order, with later highlights taking precedence over earlier ones.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>every</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
float | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">If `value` is a callable, run the function 'every' number of seconds while the client connection is open. Has no effect otherwise. The event can be accessed (e.g. to cancel it) via this component's .load_event attribute.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>lines</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
int | |
``` | |
</td> | |
<td align="left"><code>5</code></td> | |
<td align="left">None</td> | |
</tr> | |
<tr> | |
<td align="left"><code>label</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
str | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">The label for this component. Appears above the component and is also used as the header if there are a table of examples for this component. If None and used in a `gr.Interface`, the label will be the name of the parameter this component is assigned to.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>interactive</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
bool | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">Whether user should be able to enter code or only view it.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>show_label</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
bool | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">if True, will display label.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>container</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
bool | |
``` | |
</td> | |
<td align="left"><code>True</code></td> | |
<td align="left">If True, will place the component in a container - providing some extra padding around the border.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>scale</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
int | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">relative width compared to adjacent Components in a Row. For example, if Component A has scale=2, and Component B has scale=1, A will be twice as wide as B. Should be an integer.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>min_width</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
int | |
``` | |
</td> | |
<td align="left"><code>160</code></td> | |
<td align="left">minimum pixel width, will wrap if not sufficient screen space to satisfy this value. If a certain scale value results in this Component being narrower than min_width, the min_width parameter will be respected first.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>visible</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
bool | |
``` | |
</td> | |
<td align="left"><code>True</code></td> | |
<td align="left">If False, component will be hidden.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>elem_id</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
str | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">An optional string that is assigned as the id of this component in the HTML DOM. Can be used for targeting CSS styles.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>elem_classes</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
list[str] | str | None | |
``` | |
</td> | |
<td align="left"><code>None</code></td> | |
<td align="left">An optional list of strings that are assigned as the classes of this component in the HTML DOM. Can be used for targeting CSS styles.</td> | |
</tr> | |
<tr> | |
<td align="left"><code>render</code></td> | |
<td align="left" style="width: 25%;"> | |
```python | |
bool | |
``` | |
</td> | |
<td align="left"><code>True</code></td> | |
<td align="left">If False, component will not render be rendered in the Blocks context. Should be used if the intention is to assign event listeners now but render the component later.</td> | |
</tr> | |
</tbody></table> | |
### Events | |
| name | description | | |
|:-----|:------------| | |
| `change` | Triggered when the value of the HighlightedCode changes either because of user input (e.g. a user types in a textbox) OR because of a function update (e.g. an image receives a value from the output of an event trigger). See `.input()` for a listener that is only triggered by user input. | | |
| `input` | This listener is triggered when the user changes the value of the HighlightedCode. | | |
| `focus` | This listener is triggered when the HighlightedCode is focused. | | |
| `blur` | This listener is triggered when the HighlightedCode is unfocused/blurred. | | |
### User function | |
The impact on the users predict function varies depending on whether the component is used as an input or output for an event (or both). | |
- When used as an Input, the component only impacts the input signature of the user function. | |
- When used as an output, the component only impacts the return signature of the user function. | |
The code snippet below is accurate in cases where the component is used as both an input and an output. | |
- **As output:** Is passed, passes the code entered as a `str`. | |
- **As input:** Should return, expects a `str` of code or a single-element `tuple`: (filepath,) with the `str` path to a file containing the code. | |
```python | |
def predict( | |
value: str | None | |
) -> tuple[str] | str | None: | |
return value | |
``` | |