Skip to content

Commit 135cb30

Browse files
committed
WIP Schema & Command overhaul
1 parent 0b905d0 commit 135cb30

File tree

42 files changed

+6639
-658
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+6639
-658
lines changed

@webwriter/core/localization/generated/de.ts

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,8 @@
4848
'pageupKey': `▲ Bild`,
4949
'rightKey': `→ Rechts`,
5050
's0184079b36201d24': `Dieses Widget hinzufügen`,
51-
's0396202b716732ec': `Markiere die Auswahl als durchgestrichen`,
5251
's03d2a538c7c99132': `Einstellungen umschalten`,
5352
's064339c229374050': `Encoding`,
54-
's0978fb5ba3145996': `Liste einfügen (ungeordnet)`,
55-
's09c3f1d21de14ae1': `Markiere die Auswahl als unterstrichen`,
5653
's0bdca49248ba4820': `Tastenkürzel`,
5754
's0c883713b83616a8': `Speichere das aktive Dokument`,
5855
's0dc452999c129e15': `Live-Reloading aktivieren`,
@@ -64,7 +61,6 @@
6461
's1357c9b016a9a631': `CSS-Größe:`,
6562
's1570e1200a882f33': `Block-Innenabstand setzen`,
6663
's1626a7e10a9f9dcc': `Legt die Schriftart der Auswahl fest`,
67-
's162f6f7ed3fc2584': `Schublade einfügen`,
6864
's163770926259036e': `Zeilenabstand setzen`,
6965
's16b9446e3a70e1f4': `Attribute`,
7066
's16f2f1c2c516d307': `Öffne ein Dokument`,
@@ -84,26 +80,15 @@
8480
's2591806d7b222591': `Änderungen zurücksetzen`,
8581
's268ecd1cef45a9a8': `Bestätigen?`,
8682
's2692bc028fed91f1': `⇪ Feststell`,
87-
's29eb103449472e3b': `Überschrift einfügen (Ebene 3)`,
88-
's29ee7434494a0dfe': `Überschrift einfügen (Ebene 2)`,
89-
's29f21c34494d614d': `Überschrift einfügen (Ebene 1)`,
90-
's29fbfc3449557f72': `Überschrift einfügen (Ebene 6)`,
91-
's29ff743449588131': `Überschrift einfügen (Ebene 5)`,
92-
's2a031834495bcdb4': `Überschrift einfügen (Ebene 1)`,
9383
's2a75c946ef4dcab7': `Sonstiges`,
9484
's2b8f50c64be440f7': str`${0} auswählen...`,
9585
's2ceb11be2290bb1b': `Abbrechen`,
96-
's2f2044f2431a32d5': `Überschrift`,
97-
's337a1e9022a8d19f': `Tabelle`,
9886
's33b62827f665c461': `Keine Pakete installiert`,
9987
's33f85f24c0f5f008': `Speichern`,
10088
's342b0cabfa672822': `Hilf dem Nutzer, das Widget zu finden`,
10189
's34dcda3b0f9d5a98': `URL umschalten`,
10290
's34f724979a124c50': `Setze die Hintergrundfarbe des auswählten Texts`,
10391
's35aeaff1425bca9e': `WebWriter unterstützt diesen Datentypen nicht`,
104-
's35c3125c7750681e': `Blockzitat`,
105-
's3643189d1abbb7f4': `Code`,
106-
's377e24af9628c37e': `Geordnete Liste`,
10792
's37fa3b9cd51c2dfd': `Legt die Schriftgröße der Auswahl fest`,
10893
's382a2aa3984474dd': `Erstellen`,
10994
's38980f98cb07ceb8': `Speichere das aktive Dokument als Kopie`,
@@ -113,7 +98,6 @@
11398
's3b3cfb9df7a16976': `Block-Text ausrichten`,
11499
's3cf89cb47fdde7e9': `Link`,
115100
's3d09398e555ee5f9': `Fortgeschrittene Optionen`,
116-
's3d249bb480032121': `Liste`,
117101
's4023fcc0ecf63c51': `Öffnet oder schließt die Einstellungen-Schublade`,
118102
's417b90913e05bc17': `Vorschau`,
119103
's418f2020fe996832': `Änderungen bestätigen`,
@@ -124,12 +108,8 @@
124108
's4cb38675a21b2c98': ``,
125109
's4ea0f21fc2a338a1': `Nach oben verschieben`,
126110
's4f20edb48a6287c9': `Laden`,
127-
's523eb9043213ff0d': `Kursiv`,
128111
's543906d1db8b2283': `Bearbeite `,
129-
's587ac858dd80f6fa': `Tiefgestellt`,
130-
's599dcd2472c75c19': `Absatz`,
131112
's5a0742dba0defaec': `Setze die Text-Ausrichtung des auswählten Blocks`,
132-
's5b8cc9bb61ddce15': `Absatz einfügen`,
133113
's600fd23c9ce971e8': `Drucke das aktive Dokument`,
134114
's6196153c4b0c1ea0': `Installieren`,
135115
's61e136c0658e27d5': `Protokoll`,
@@ -160,7 +140,6 @@
160140
's8670e5ad3bf0dcf8': `Speichern unter`,
161141
's8688d74dd3716d6e': `Tastenkürzel für Befehle`,
162142
's889fce46bd2236e5': `Dokumente`,
163-
's88a62d29529948fb': `Tabelle einfügen`,
164143
's8a7fa8a052138aef': `Warnung:`,
165144
's8a9eb438abac7c6a': `Beschriftungen`,
166145
's8b0432eecbd8b034': `Aktualisieren`,
@@ -170,20 +149,17 @@
170149
's8f4be9f086eb530f': `Rückgängig`,
171150
's8f533296a536965e': `Speichern unter...`,
172151
's9017cdca3510148e': `Zeige eine Live-Vorschau, wenn die Maus über ein Widget in der Palette bewegt wird.`,
173-
's92f846b9be2e8e8d': `Markiere die Auswahl als kursiv`,
174152
's9565553d163fc92a': `Script`,
175153
's979dc9098d6bb3e0': `Schriftgröße erhöhen`,
176154
's9896529e5cb20558': `Externe Datei`,
177155
's98977a87d1b93941': `Setze Informationen, Styles und Skripte zurück`,
178-
's99b38e000175cc84': `Durchgestrichen`,
179156
's9bf0b9da3f509795': `Widget-Package`,
180157
's9d8b8aa2b404c2c8': `Einstellungen`,
181158
's9e3dbb678150edd4': `Schriftart festlegen`,
182159
'sa00df4e39c72d3b4': str`${0} wird nicht unterstützt`,
183160
'sa2ffa28d1155c0ff': `Erhöht die Schriftgröße der Auswahl`,
184161
'sa311a24c1471a974': `Dokument`,
185162
'sa3c9339de23c1752': `Format`,
186-
'sa492a51a707930fa': `Blockzitat einfügen`,
187163
'sa645d315510dc09e': `Wähle einen Festplatten-Dateipfad`,
188164
'sa65d4ad99f1d8c06': `Text-Hintergrund setzen`,
189165
'sa6f8d27bca557059': `Verschiebe meta/link/style-Elemente in dieses Element`,
@@ -192,48 +168,36 @@
192168
'sab55faae8e165407': `Innenabstand <br> wie Außenabstand`,
193169
'sad288b082f4d3521': `Das System scheint offline zu sein. Offline können verfügbare und veraltete Pakete nicht abgerufen werden.`,
194170
'sae3629911a62147f': `JS-Größe:`,
195-
'saf3da7c95cb17260': `Markiere die Auswahl als hochgestellt`,
196171
'safc6f203342d09e2': `Vorschau für das aktive Dokument umschalten`,
197172
'sb0a974028c99ca6d': `Adaptionen erlauben?`,
198173
'sb0d4f0f7993cf085': `Schriftgröße festlegen`,
199174
'sb1494c08c8c720d1': `Textfarbe setzen`,
200175
'sb199b34dca0a4cfc': `Hier Inhalt eingeben...`,
201-
'sb206d700d26b14ff': `Unterstrichen`,
202176
'sb233557012dcb328': `Nach unten verschieben`,
203177
'sb430f5b4824de0d3': `Layout wählen`,
204178
'sb66beca1e766dcb3': `Anwenden und importieren`,
205179
'sb721548f59b9b1e2': `Vorschau-Modus`,
206180
'sb8f855b49234b81b': `Anwenden`,
207-
'sb9e9a7dd45966756': `Markiere die Auswahl als fett`,
208181
'sba509fd8ed61d1d5': `Ungespeicherte Datei`,
209182
'sbba865d4b437944f': `Attribut`,
210183
'sbbe639e3a3ed95d1': `NoScript`,
211184
'sbc5bb5bb74d141b9': `Deinstallieren`,
212-
'sbc5f2a81604baf9b': `Überschrift 6`,
213-
'sbc5f2b81604bb14e': `Überschrift 5`,
214-
'sbc5f2c81604bb301': `Überschrift 4`,
215-
'sbc5f2d81604bb4b4': `Überschrift 3`,
216-
'sbc5f2e81604bb667': `Überschrift 2`,
217185
'sbe4a7c8f231739b3': `oder Datei einfügen/ablegen/wählen`,
218186
'sbf89a6f724bef29f': `Setze den Innenabstand des ausgewählten Blocks`,
219187
'sc221faca1ecb4aee': `Anonym`,
220188
'sc3ac225273c8316b': `Allgemeines`,
221189
'sc3cfee84dbbf36ae': `Lokale Datei`,
222-
'sc5cb39478b9b7625': `Markiere die Auswahl als tiefgestellt`,
223190
'sc60e0271fdc285f2': `Setze den Hintergrund des auswählten Blocks`,
224191
'sc74e3567875ce255': `Sowohl der Tag deines Widgets als auch der Name des NPM-Packages`,
225192
'sc7691fecb3373a42': `Keine lokalen Pakete`,
226-
'scd0ddab5a7a0f930': `Schublade`,
227193
'scf735dfae10f3870': `Bildung`,
228194
'sd158a5fc0f062f18': `Verfügbar`,
229195
'sd846987afc2e2cde': `Zeige einen Platzhalter-Text, wenn ein Dokument leer ist`,
230196
'sda174a4c93e84ce6': `Fehler beim Importieren von`,
231197
'sdb311229f4b5eb3b': `Lokales Package importieren`,
232-
'sdb711380a28fec75': `Liste einfügen (geordnet)`,
233198
'sdcd1efc06af80825': `Alle Rechte vorbehalten`,
234199
'sddc49047f66a64ab': `Keine Beschreibung verfügbar`,
235200
'sded940efcadd8f10': `Das Dokument speichern`,
236-
'sdf946172dfa0328f': `Hochgestellt`,
237201
'se036b53f145441cd': `Gemischter Inhalt`,
238202
'se1f5bb0386c88f96': `Setze die Farbe des auswählten Texts`,
239203
'se25e4f2cb77b8be8': `Sprache für das WebWriter-Interface und neue Dokumente`,
@@ -258,9 +222,6 @@
258222
'sf471ec2496f904cc': `Änderungen verwerfen`,
259223
'sf65df67a03bebe4b': `Erforderlich für dieses Widget`,
260224
'sf6673729c03ae999': `WebWriter zurücksetzen`,
261-
'sf7c0eba7c822e3d6': `Fett`,
262-
'sf86bd4d2982f3b74': `Markiere die Auswahl als Code`,
263-
'sf8e82313fa411494': `Markiere die Auswahl als Link`,
264225
'sf9559106e88ee46d': `Keine Pakete veraltet`,
265226
'sf9f2c719a04066ec': `Anwendung`,
266227
'sfdeef3dccf409f81': `Dieses Keyword is für alle Widgets erforderlich`,

@webwriter/core/model/marshal/html.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ export async function docToBundle(doc: Node, head: Node, bundle: Environment["bu
5353
.filter(name => allWidgetTypes.includes(name))
5454

5555
const packageNames = widgetTypes.map(name => doc.type.schema.nodes[name].spec["package"].name)
56-
const unscopedPackageNames = packageNames.map(t => unscopePackageName(t))
56+
const scopedEntries = packageNames.map(n => [n, unscopePackageName(n)])
5757

5858
const statements = [
5959
`import "@open-wc/scoped-elements"`
60-
].concat(unscopedPackageNames.flatMap(t => [
61-
`import ${t.replaceAll("-", "_")} from "${t}"`,
62-
`customElements.define("${t}", ${t.replaceAll("-", "_")})`
60+
].concat(scopedEntries.flatMap(([s, u]) => [
61+
`import ${u.replaceAll("-", "_")} from "${s}"`,
62+
`customElements.define("${u}", ${u.replaceAll("-", "_")})`
6363
]))
6464
const entrypoint = statements.length > 1? statements.join(";"): ""
6565

@@ -148,14 +148,15 @@ export function parse(data: string, schema: Schema) {
148148
head = head.type.schema.node("head", {...head.attrs, htmlAttrs}, head.content, head.marks)
149149

150150
const editorState = createEditorState({schema, doc}, head)
151-
console.log(editorState)
152151
return editorState
153152
}
154153

155154
export async function serialize(explorable: Node, head: Node, bundle: Environment["bundle"]) {
156155

157156
const {html, js, css} = await docToBundle(explorable, head, bundle)
158157

158+
console.log(js)
159+
159160
const script = html.createElement("script")
160161
script.type = "text/javascript"
161162
script.text = js
Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,36 @@
1-
Expression
2-
= Group/Sequence/Alternation/SimpleExpression
1+
Expression = Alternation/Subset/Conjunction/Sequence/Group/SimpleExpression
32

4-
Group = &" "* "(" " "* expression:Expression " "* ")" quantifier:Quantifier? &" "* {
3+
Group = &_ "[" _ expression:Expression _ "]" quantifier:Quantifier? &_ {
54
return {...expression, ...(quantifier ?? {min: expression.min ?? 1, max: expression.max ?? 1}), raw: text()}
65
}
76

8-
Sequence = " "* head:(Group/Alternation/SimpleExpression) tail:(" "+ @value:(Group/Alternation/SimpleExpression))+ " "* {
9-
return {type: "Sequence", content: [head, ...tail], min: 1, max: 1, raw: text()}
7+
Alternation = &_ head:(Subset/Conjunction/Sequence/Group/SimpleExpression) tail:(_ "|" _ @value:(Subset/Conjunction/Sequence/Group/SimpleExpression))+ &_ {
8+
return {type: "Alternation", content: [head, ...tail], min: 1, max: 1, raw: text()}
109
}
1110

12-
Alternation = &" "* head:(Group/SimpleExpression) tail:(" "* "|" " "* @value:(Group/SimpleExpression))+ &" "* {
13-
return {type: "Alternation", content: [head, ...tail], min: 1, max: 1, raw: text()}
11+
Subset = &_ head:(Conjunction/Sequence/Group/SimpleExpression) tail:(_ "||" _ @value:(Conjunction/Sequence/Group/SimpleExpression))+ &_ {
12+
return {type: "Subset", content: [head, ...tail], min: 1, max: 1, raw: text()}
1413
}
1514

16-
SimpleExpression = &" "* content:Token quantifier:Quantifier? &" "* {
15+
Conjunction = &_ head:(Sequence/Group/SimpleExpression) tail:(_ "&&" _ @value:(Sequence/Group/SimpleExpression))+ &_ {
16+
return {type: "Conjunction", content: [head, ...tail], min: 1, max: 1, raw: text()}
17+
}
18+
19+
Sequence = _ head:(Group/SimpleExpression) tail:(_ @value:(Group/SimpleExpression))+ _ {
20+
return {type: "Sequence", content: [head, ...tail], min: 1, max: 1, raw: text()}
21+
}
22+
23+
SimpleExpression = &_ content:(Type/Literal) quantifier:Quantifier? &_ {
1724
return {type: "SimpleExpression", content, ...(quantifier ?? {min: 1, max: 1}), raw: text()}
1825
}
1926

20-
Token
21-
= $([_a-zA-Z][_a-zA-Z0-9]*)
27+
Literal
28+
= $([_a-zA-Z][-_a-zA-Z0-9]*/[()/,])
29+
30+
Type
31+
= "<" $([_a-zA-Z][-_a-zA-Z0-9]*) ">"
2232
23-
Star = "*" {
33+
Asterisk = "*" {
2434
return {min: 0, max: Number.POSITIVE_INFINITY}
2535
}
2636
@@ -32,19 +42,29 @@ Question = "?" {
3242
return {min: 0, max: 1}
3343
}
3444
45+
Hash = "#" {
46+
return {min: 1, max: Number.POSITIVE_INFINITY, list: true}
47+
}
48+
49+
Exclamation = "!" {
50+
return {min: 1, max: 1, nonEmpty: true}
51+
}
52+
3553
SingleQuantifier = "{"valStr:([0-9]+)"}" {
3654
let min, max; min = max = parseInt(valStr.join(""))
55+
min === 0 && max === 0? error("Both min and max can't be 0 at the same time"): null
3756
return {min, max}
3857
}
3958
4059
DoubleQuantifier = '{' _ minStr:([0-9]+)',' _ maxStr:([0-9]+) _ '}' {
4160
let min = parseInt(minStr.join(""))
4261
let max = parseInt(maxStr.join(""))
4362
min > max? error("min must be less than or equal to max"): null
63+
min === 0 && max === 0? error("Both min and max can't be 0 at the same time"): null
4464
return {min, max}
4565
}
4666
47-
Quantifier = Star / Plus / Question / SingleQuantifier / DoubleQuantifier
67+
Quantifier = Asterisk / Plus / Question / Exclamation / Hash / SingleQuantifier / DoubleQuantifier
4868

4969
_
5070
= [ \t\n\r]*

@webwriter/core/model/schemas/packageschema/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ const nonNodeBuiltinPattern = new RegExp(`^(?!${NODE_BUILTINS.join("|")}).*$`)
9393
const spdxLicensePattern = new RegExp(`^(${SPDX_LICENSES.map(x => x.replaceAll(".", "\.")).join("|")})$`)
9494
const nodePlatformPattern = new RegExp(`^(${NODE_PLATFORMS.join("|")})$`)
9595
const nodeArchPattern = new RegExp(`^(${NODE_ARCHS.join("|")})$`)
96-
const npmPersonPattern = /^\s*(?<name>.*?)\s*(?:<(?<email>.+)>)?\s*(?:\((?<url>.+)\))?\s*$/
96+
const npmPersonPattern = /^\s*(?<name>.*?)(?:<(?<email>.+)>)?\s*(?:\((?<url>.+)\))?\s*$/
9797
const mimePattern = /#?(?<supertype>[\w!#$%&'*.^`|~-]+)(?:\/(?<subtype>[\w!#$%&'*.^`|~-]+)(?:\+(?<suffix>[\w!#$%&'*.^`|~-]+))?(?:;(?<pkey>[\w!#$%&'*.^`|~-]+)=(?<pval>[\w!#$%&'*.^`|~-]+))?)?/
9898
const semverPattern = /(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)\.(?<patch>0|[1-9]\d*)(?:-(?<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z\-][0-9a-zA-Z\-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z\-][0-9a-zA-Z\-]*))*))?(?:\+(?<buildmetadata>[0-9a-zA-Z\-]+(?:\.[0-9a-zA-Z\-]+)*))?/
9999
const npmNamePattern = /^(@(?<organization>[a-z0-9\-~][a-z0-9\-._~]*)\/)?(?<name>[a-z0-9\-~][a-z0-9\-._~]*)$/

@webwriter/core/model/schemas/resourceschema/editingstyles.css

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,10 @@
106106
}
107107

108108
.ProseMirror {
109+
position: relative;
109110
outline: none;
110111
display: block;
111112
white-space: normal !important;
112-
font-family: Arial, sans-serif;
113-
font-size: 14pt;
114113
background: white;
115114
border: 1px solid rgba(0, 0, 0, 0.1);
116115
padding: 19px;
@@ -240,21 +239,6 @@
240239
user-select: none;
241240
-webkit-user-select: none;
242241
}
243-
244-
.ProseMirror > p {
245-
margin: 0;
246-
position: relative;
247-
z-index: 1;
248-
line-height: 2;
249-
}
250-
251-
.ProseMirror table {
252-
margin: 0;
253-
}
254-
255-
.ProseMirror {
256-
position: relative;
257-
}
258242

259243
html[data-dragover] .ProseMirror::after {
260244
content: "";
@@ -308,11 +292,8 @@
308292
color: var(--sl-color-gray-100);
309293
}
310294

311-
blockquote {
312-
background: #f9f9f9;
313-
border-left: 10px solid #ccc;
314-
margin: 1.5em 10px;
315-
padding: 0.5em 10px;
295+
abbr {
296+
text-decoration: underline 1px dotted currentColor;
316297
}
317298

318299
@media only screen and (min-width: 1071px) {

@webwriter/core/model/schemas/resourceschema/head.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ export const headSchemaSpec = {
7777
export const headSchema = new Schema(headSchemaSpec)
7878

7979
const initialHeadDoc = () => headSchema.node("head", undefined, [
80+
headSchema.node("meta", {charset: "utf-8"}),
8081
headSchema.node("meta", {name: "generator", content: `webwriter@${webwriterPackage.version}`}),
8182
headSchema.node("style", {data: {"data-ww-theme": "base"}}, headSchema.text(themes.base))
8283
])

0 commit comments

Comments
 (0)