vsj0702 commited on
Commit
be5d112
Β·
verified Β·
1 Parent(s): ca3a9c8

Adding language selector

Browse files
Files changed (1) hide show
  1. code_editor.py +21 -8
code_editor.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import streamlit as st
2
  import streamlit_ace as st_ace
3
  import os
@@ -5,6 +7,7 @@ import time, psutil
5
  from pathlib import Path
6
  from utils import execute_code
7
 
 
8
  DEFAULT_SNIPPETS = {
9
  "Python": '''# default code\na = int(input())\nb = int(input())\nprint("Sum:", a + b)''',
10
  "C": '''// default code\n#include <stdio.h>\nint main() {\n int a, b;\n scanf("%d %d", &a, &b);\n printf("Sum: %d\\n", a + b);\n return 0;\n}''',
@@ -14,6 +17,7 @@ DEFAULT_SNIPPETS = {
14
  "C#": '''// default code\nusing System;\npublic class Program {\n public static void Main(string[] args) {\n int a = Convert.ToInt32(Console.ReadLine());\n int b = Convert.ToInt32(Console.ReadLine());\n Console.WriteLine("Sum: " + (a + b));\n }\n}'''
15
  }
16
 
 
17
  EXT_LANG_MAP = {
18
  ".py": "Python",
19
  ".cpp": "C++",
@@ -23,7 +27,15 @@ EXT_LANG_MAP = {
23
  ".cs": "C#"
24
  }
25
 
26
- def render_code_editor(selected_lang, ace_theme, editor_key):
 
 
 
 
 
 
 
 
27
  uploaded_file = st.file_uploader("πŸ“€ Upload file", type=["py", "cpp", "c", "java", "js", "cs", "txt"])
28
 
29
  if uploaded_file:
@@ -37,6 +49,7 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
37
  prev_name = st.session_state.get("uploaded_file_name")
38
  prev_content = st.session_state.get("uploaded_file_content")
39
 
 
40
  if content != prev_content or filename != prev_name:
41
  st.session_state.uploaded_file_name = filename
42
  st.session_state.uploaded_file_content = content
@@ -55,20 +68,20 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
55
  st.error("❌ Unsupported file format.")
56
  return
57
 
58
- # Handle default fallback (only if no upload or no valid code set)
59
- previous_lang = st.session_state.get("prev_language")
60
  default_code = DEFAULT_SNIPPETS[selected_lang]
61
 
62
  if (
63
  st.session_state.get("code") is None
64
  or st.session_state.code.strip() == ""
65
- or selected_lang != previous_lang
66
- or st.session_state.code.strip() == DEFAULT_SNIPPETS.get(previous_lang, "")
67
  ):
68
  st.session_state.code = default_code
69
  st.session_state.prev_language = selected_lang
70
 
71
- # ── ACE Editor ──────────────────────────────
72
  code = st_ace.st_ace(
73
  value=st.session_state.code,
74
  placeholder=f"Start typing your {selected_lang} code…",
@@ -86,7 +99,7 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
86
  if code != st.session_state.code:
87
  st.session_state.code = code
88
 
89
- # ── Input ──────────────────────────────
90
  user_input = st.text_area(
91
  "πŸ“₯ Input (stdin)",
92
  value=st.session_state.stdin,
@@ -122,7 +135,7 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
122
  st.markdown(f"⏱️ **Execution Time:** `{exec_time:.4f}s`")
123
  st.markdown(f"πŸ’Ύ **Memory Used:** `{mem_used:.2f} KB`")
124
 
125
- # ── Download ──────────────────────────────
126
  if st.session_state.code:
127
  lang_ext = {
128
  "Python": "py", "C": "c", "C++": "cpp", "Java": "java",
 
1
+ # code_editor.py
2
+
3
  import streamlit as st
4
  import streamlit_ace as st_ace
5
  import os
 
7
  from pathlib import Path
8
  from utils import execute_code
9
 
10
+ # Default code snippets
11
  DEFAULT_SNIPPETS = {
12
  "Python": '''# default code\na = int(input())\nb = int(input())\nprint("Sum:", a + b)''',
13
  "C": '''// default code\n#include <stdio.h>\nint main() {\n int a, b;\n scanf("%d %d", &a, &b);\n printf("Sum: %d\\n", a + b);\n return 0;\n}''',
 
17
  "C#": '''// default code\nusing System;\npublic class Program {\n public static void Main(string[] args) {\n int a = Convert.ToInt32(Console.ReadLine());\n int b = Convert.ToInt32(Console.ReadLine());\n Console.WriteLine("Sum: " + (a + b));\n }\n}'''
18
  }
19
 
20
+ # Extension-to-language mapping
21
  EXT_LANG_MAP = {
22
  ".py": "Python",
23
  ".cpp": "C++",
 
27
  ".cs": "C#"
28
  }
29
 
30
+ def render_code_editor(ace_theme):
31
+ # ── Language Selector ──────────────────────────────
32
+ lang_list = list(DEFAULT_SNIPPETS.keys())
33
+ default_lang = st.session_state.get("language", "Python")
34
+ selected_lang = st.selectbox("Language", lang_list, index=lang_list.index(default_lang))
35
+ st.session_state.language = selected_lang
36
+ editor_key = f"editor_{selected_lang}"
37
+
38
+ # ── File Upload ──────────────────────────────
39
  uploaded_file = st.file_uploader("πŸ“€ Upload file", type=["py", "cpp", "c", "java", "js", "cs", "txt"])
40
 
41
  if uploaded_file:
 
49
  prev_name = st.session_state.get("uploaded_file_name")
50
  prev_content = st.session_state.get("uploaded_file_content")
51
 
52
+ # Only react to new uploads
53
  if content != prev_content or filename != prev_name:
54
  st.session_state.uploaded_file_name = filename
55
  st.session_state.uploaded_file_content = content
 
68
  st.error("❌ Unsupported file format.")
69
  return
70
 
71
+ # ── Fallback Default Code ──────────────────────────────
72
+ prev_lang = st.session_state.get("prev_language")
73
  default_code = DEFAULT_SNIPPETS[selected_lang]
74
 
75
  if (
76
  st.session_state.get("code") is None
77
  or st.session_state.code.strip() == ""
78
+ or selected_lang != prev_lang
79
+ or st.session_state.code.strip() == DEFAULT_SNIPPETS.get(prev_lang, "")
80
  ):
81
  st.session_state.code = default_code
82
  st.session_state.prev_language = selected_lang
83
 
84
+ # ── ACE Code Editor ──────────────────────────────
85
  code = st_ace.st_ace(
86
  value=st.session_state.code,
87
  placeholder=f"Start typing your {selected_lang} code…",
 
99
  if code != st.session_state.code:
100
  st.session_state.code = code
101
 
102
+ # ── Stdin Input ──────────────────────────────
103
  user_input = st.text_area(
104
  "πŸ“₯ Input (stdin)",
105
  value=st.session_state.stdin,
 
135
  st.markdown(f"⏱️ **Execution Time:** `{exec_time:.4f}s`")
136
  st.markdown(f"πŸ’Ύ **Memory Used:** `{mem_used:.2f} KB`")
137
 
138
+ # ── Download Code ──────────────────────────────
139
  if st.session_state.code:
140
  lang_ext = {
141
  "Python": "py", "C": "c", "C++": "cpp", "Java": "java",