src/Tools/VSCode/extension/src/decorations.ts
author wenzelm
Sat, 04 Mar 2017 21:04:44 +0100
changeset 65106 a57794dbe0af
parent 65104 66b19d05dcee
child 65122 1edb570f5b17
permissions -rw-r--r--
more general hover_message (see also JEdit_Rendering.tooltip_message);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
65094
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     1
'use strict';
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     2
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     3
import * as vscode from 'vscode'
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     4
import { Range, MarkedString, DecorationOptions, DecorationRenderOptions,
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     5
  TextEditorDecorationType, ExtensionContext, Uri } from 'vscode'
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     6
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     7
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     8
/* known decoration types */
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
     9
65104
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    10
export const types = new Map<string, TextEditorDecorationType>()
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    11
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    12
const background_colors = [
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    13
  "unprocessed1",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    14
  "running1",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    15
  "bad",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    16
  "intensify",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    17
  "entity",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    18
  "quoted",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    19
  "antiquoted",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    20
  "active",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    21
  "active_result",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    22
  "markdown_item1",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    23
  "markdown_item2",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    24
  "markdown_item3",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    25
  "markdown_item4"
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    26
]
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    27
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    28
const foreground_colors = [
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    29
  "quoted",
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    30
  "antiquoted"
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    31
]
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    32
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    33
function property(prop: string, config: string): Object
65094
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    34
{
65104
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    35
  let res = {}
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    36
  res[prop] = vscode.workspace.getConfiguration("isabelle").get<string>(config)
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    37
  return res
65094
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    38
}
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    39
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    40
export function init(context: ExtensionContext)
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    41
{
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    42
  function decoration(options: DecorationRenderOptions): TextEditorDecorationType
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    43
  {
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    44
    const typ = vscode.window.createTextEditorDecorationType(options)
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    45
    context.subscriptions.push(typ)
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    46
    return typ
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    47
  }
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    48
65104
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    49
  function background(color: string): TextEditorDecorationType
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    50
  {
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    51
    const prop = "backgroundColor"
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    52
    const light = property(prop, color.concat("_light_color"))
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    53
    const dark = property(prop, color.concat("_dark_color"))
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    54
    return decoration({ light: light, dark: dark })
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    55
  }
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    56
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    57
  types.clear
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    58
  for (let color of background_colors) {
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    59
    types["background_".concat(color)] = background(color)
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    60
  }
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    61
  for (let color of foreground_colors) {
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    62
    types["foreground_".concat(color)] = background(color) // approximation
66b19d05dcee decorations for background and foreground colors;
wenzelm
parents: 65098
diff changeset
    63
  }
65106
a57794dbe0af more general hover_message (see also JEdit_Rendering.tooltip_message);
wenzelm
parents: 65104
diff changeset
    64
  types["hover_message"] = decoration({})
65094
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    65
}
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    66
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    67
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    68
/* decoration for document node */
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    69
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    70
export interface Decoration
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    71
{
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    72
  uri: string,
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    73
  "type": string,
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    74
  content: DecorationOptions[]
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    75
}
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    76
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    77
export function apply(decoration: Decoration)
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    78
{
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    79
  let typ = types[decoration.type]
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    80
  if (typ) {
65097
ed2e33653438 more robust Uri comparison, notably on Windows;
wenzelm
parents: 65095
diff changeset
    81
    let uri = Uri.parse(decoration.uri).toString()
65094
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    82
    let editor =
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    83
      vscode.window.visibleTextEditors.find(
65097
ed2e33653438 more robust Uri comparison, notably on Windows;
wenzelm
parents: 65095
diff changeset
    84
        function (editor) { return uri == editor.document.uri.toString() })
65094
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    85
    if (editor) editor.setDecorations(typ, decoration.content)
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    86
  }
386d9d487f62 support for decorations;
wenzelm
parents:
diff changeset
    87
}