153 val buffer = text_area.getBuffer |
153 val buffer = text_area.getBuffer |
154 val decode = Isabelle_Encoding.is_active(buffer) |
154 val decode = Isabelle_Encoding.is_active(buffer) |
155 |
155 |
156 Isabelle.mode_syntax(JEdit_Lib.buffer_mode(buffer)) match { |
156 Isabelle.mode_syntax(JEdit_Lib.buffer_mode(buffer)) match { |
157 case Some(syntax) => |
157 case Some(syntax) => |
158 val caret = text_area.getCaretPosition |
|
159 |
|
160 val line = buffer.getLineOfOffset(caret) |
|
161 val line_start = buffer.getLineStartOffset(line) |
|
162 val line_length = (buffer.getLineEndOffset(line) min buffer.getLength) - line_start |
|
163 val line_text = buffer.getSegment(line_start, line_length) |
|
164 |
|
165 val context = |
158 val context = |
166 (for { |
159 (for { |
167 rendering <- opt_rendering |
160 rendering <- opt_rendering |
168 range <- JEdit_Lib.before_caret_range(text_area, rendering) |
161 range <- JEdit_Lib.before_caret_range(text_area, rendering) |
169 context <- rendering.language_context(range) |
162 context <- rendering.language_context(range) |
170 } yield context) getOrElse syntax.language_context |
163 } yield context) getOrElse syntax.language_context |
171 |
164 |
172 syntax.completion.complete( |
165 val caret = text_area.getCaretPosition |
173 history, decode, explicit, line_start, line_text, caret - line_start, false, context) |
166 val line_range = JEdit_Lib.line_range(buffer, text_area.getCaretLine) |
|
167 val line_start = line_range.start |
|
168 for { |
|
169 line_text <- JEdit_Lib.try_get_text(buffer, line_range) |
|
170 result <- |
|
171 syntax.completion.complete( |
|
172 history, decode, explicit, line_start, line_text, caret - line_start, false, context) |
|
173 } yield result |
174 |
174 |
175 case None => None |
175 case None => None |
176 } |
176 } |
177 } |
177 } |
178 |
178 |