153 lines
6.2 KiB
Python
Executable File
153 lines
6.2 KiB
Python
Executable File
import streamlit as st
|
|
|
|
from pathlib import Path
|
|
from streamlit.components.v1.components import declare_component
|
|
from streamlit_ace.version import __release__, __version__
|
|
|
|
if __release__:
|
|
_source = {"path": (Path(__file__).parent/"frontend"/"build").resolve()}
|
|
else:
|
|
_source = {"url": "http://localhost:3001"}
|
|
|
|
_render_component = declare_component("streamlit_ace", **_source)
|
|
|
|
# Source: https://github.com/ajaxorg/ace-builds/tree/master/src/mode-*.js
|
|
LANGUAGES = [
|
|
"abap", "abc", "actionscript", "ada", "alda", "apache_conf", "apex", "applescript", "aql",
|
|
"asciidoc", "asl", "assembly_x86", "autohotkey", "batchfile", "c9search", "c_cpp", "cirru",
|
|
"clojure", "cobol", "coffee", "coldfusion", "crystal", "csharp", "csound_document", "csound_orchestra",
|
|
"csound_score", "csp", "css", "curly", "d", "dart", "diff", "django", "dockerfile", "dot", "drools",
|
|
"edifact", "eiffel", "ejs", "elixir", "elm", "erlang", "forth", "fortran", "fsharp", "fsl", "ftl",
|
|
"gcode", "gherkin", "gitignore", "glsl", "gobstones", "golang", "graphqlschema", "groovy", "haml",
|
|
"handlebars", "haskell", "haskell_cabal", "haxe", "hjson", "html", "html_elixir", "html_ruby", "ini",
|
|
"io", "jack", "jade", "java", "javascript", "json", "json5", "jsoniq", "jsp", "jssm", "jsx", "julia",
|
|
"kotlin", "latex", "less", "liquid", "lisp", "livescript", "logiql", "logtalk", "lsl", "lua", "luapage",
|
|
"lucene", "makefile", "markdown", "mask", "matlab", "maze", "mediawiki", "mel", "mixal", "mushcode",
|
|
"mysql", "nginx", "nim", "nix", "nsis", "nunjucks", "objectivec", "ocaml", "pascal", "perl", "perl6",
|
|
"pgsql", "php", "php_laravel_blade", "pig", "plain_text", "powershell", "praat", "prisma", "prolog",
|
|
"properties", "protobuf", "puppet", "python", "qml", "r", "razor", "rdoc", "red", "redshift", "rhtml",
|
|
"rst", "ruby", "rust", "sass", "scad", "scala", "scheme", "scss", "sh", "sjs", "slim", "smarty",
|
|
"snippets", "soy_template", "space", "sparql", "sql", "sqlserver", "stylus", "svg", "swift", "tcl",
|
|
"terraform", "tex", "text", "textile", "toml", "tsx", "turtle", "twig", "typescript", "vala", "vbscript",
|
|
"velocity", "verilog", "vhdl", "visualforce", "wollok", "xml", "xquery", "yaml"
|
|
]
|
|
|
|
# Source: https://github.com/ajaxorg/ace-builds/tree/master/src/theme-*.js
|
|
THEMES = [
|
|
"ambiance", "chaos", "chrome", "clouds", "clouds_midnight", "cobalt", "crimson_editor", "dawn",
|
|
"dracula", "dreamweaver", "eclipse", "github", "gob", "gruvbox", "idle_fingers", "iplastic",
|
|
"katzenmilch", "kr_theme", "kuroir", "merbivore", "merbivore_soft", "mono_industrial", "monokai",
|
|
"nord_dark", "pastel_on_dark", "solarized_dark", "solarized_light", "sqlserver", "terminal",
|
|
"textmate", "tomorrow", "tomorrow_night", "tomorrow_night_blue", "tomorrow_night_bright",
|
|
"tomorrow_night_eighties", "twilight", "vibrant_ink", "xcode"
|
|
]
|
|
|
|
# Source: https://github.com/ajaxorg/ace-builds/tree/master/src/keybinding-*.js
|
|
KEYBINDINGS = [
|
|
"emacs", "sublime", "vim", "vscode"
|
|
]
|
|
|
|
|
|
def st_ace(
|
|
value="",
|
|
placeholder="",
|
|
height=None,
|
|
language="plain_text",
|
|
theme="chrome",
|
|
keybinding="vscode",
|
|
min_lines=12,
|
|
max_lines=None,
|
|
font_size=14,
|
|
tab_size=4,
|
|
wrap=False,
|
|
show_gutter=True,
|
|
show_print_margin=False,
|
|
readonly=False,
|
|
annotations=None,
|
|
markers=None,
|
|
auto_update=False,
|
|
key=None
|
|
):
|
|
"""Display an Ace editor.
|
|
|
|
Parameters
|
|
----------
|
|
value : any
|
|
The text value of this widget when it first renders.
|
|
Empty string by default.
|
|
placeholder : any
|
|
The text value of this widget when the editor is empty.
|
|
Empty string by default.
|
|
height : int or None
|
|
Desired height of the UI element expressed in pixels.
|
|
If set to None, height will auto adjust to editor's content.
|
|
None by default.
|
|
language : str or None
|
|
Language for parsing and code highlighting. If None, the editor
|
|
will not highlight content.
|
|
Available languages are defined in streamlit_ace.LANGUAGES.
|
|
Plain text by default.
|
|
theme : str or None
|
|
The theme to use. If None, a default theme is used.
|
|
Available themes are defined in streamlit_ace.THEMES.
|
|
Chrome by default.
|
|
keybinding : str
|
|
Keybinding mode set.
|
|
Available keybindings are defined in streamlit_ace.KEYBINDINGS.
|
|
Vscode by default.
|
|
min_lines : int or None
|
|
Minimum number of lines allowed in editor. 12 by default.
|
|
max_lines : int or None
|
|
Maximum number of lines allowed in editor. None by default.
|
|
font_size : int or None
|
|
The font size of the enditor. 14 by default.
|
|
tab_size : int or None
|
|
The size of a tabulation. 4 by default.
|
|
show_gutter : bool
|
|
Show or hide gutter. True by default.
|
|
show_print_margin : bool
|
|
Show or hide print margin. False by default
|
|
wrap : bool
|
|
Enable line wrapping. False by default.
|
|
readonly : bool
|
|
Make the editor read only. False by default.
|
|
annotations : list or None
|
|
Anootations to show in the editor. None by default.
|
|
markers : list or None
|
|
Markers to show in the editor. None by default.
|
|
auto_update : bool
|
|
Choose whether Streamlit auto updates on input change, or waits
|
|
for user validation. False by default.
|
|
key : str
|
|
An optional string to use as the unique key for the widget.
|
|
If this is omitted, a key will be generated for the widget
|
|
based on its content. Multiple widgets of the same type may
|
|
not share the same key.
|
|
|
|
Returns
|
|
-------
|
|
str
|
|
The current content of the ace editor widget.
|
|
"""
|
|
return _render_component(
|
|
defaultValue=str(value),
|
|
placeholder=str(placeholder),
|
|
height=height,
|
|
minLines=min_lines,
|
|
maxLines=max_lines,
|
|
fontSize=font_size,
|
|
tabSize=tab_size,
|
|
mode=language,
|
|
theme=theme,
|
|
showGutter=show_gutter,
|
|
showPrintMargin=show_print_margin,
|
|
wrapEnabled=wrap,
|
|
readOnly=readonly,
|
|
keyboardHandler=keybinding,
|
|
annotations=annotations or [],
|
|
markers=markers or [],
|
|
autoUpdate=auto_update,
|
|
key=key,
|
|
default=str(value),
|
|
)
|