XML / HTML / CSS Interpretieren

OP #4988692
Lesenswert?

Hallo zusammen

Gibt es bereits ansätze/Lösungen, wie man folgendes Skript 
interpretieren / parsen kann?
1
<head>
2
  <style>
3
    body { background: #A5A5A6; }
4
    PanelA 
5
    {   
6
      color: #A5A5A6; 
7
      font: "Verdana";
8
      width: 80px;
9
    }
10
  
11
  </style>
12

13

14
</head>
15

16
<body>
17
  <div class="Panel" style="PanelA">
18
    <div Class="Button" style = "PanelB" id="ABC">
19
    
20
  </div>
21
</body>

Es geht mir darum, mich im Skript orientieren zu können und die Struktur 
sowie die Parameter wie z.B. style="PanelA" zu interpretieren.

System: STM32F1

Danke schonmal
Gast #4988824
Lesenswert?

"Mal eben" auf keinen Fall...nur dann sieht der TO evtl ein, dass eine 
Full-Featured WebEngine im embedded Bereich nicht anwendbar ist..da muss 
ein grundlegend anderes Konzept her..nur ohne mehr Infos (wie immer..) 
wird das wohl nichts
Gast #4988835
Lesenswert?

Es geht darum, eine Beschreibungssprache für embedded Guis zu haben.

Es geht nicht darum, vollständige websites darzustellen. Sondern darum, 
etwas bestehendes zu verwenden.

Editoren für html und css gibts wie sand am meer. Weshalb nicht damit 
guis designen?

Der c interpreter zeichnet dann zb bei einem div der klasse button einem 
button. Farbe etc wird im css definiert.

Fast wie eine webseite aber halt sehr sehr vereinfacht aber mit der 
maximalen flexibilität.

Evtl gibt es auch bessere beschreibungssprachen für sowas.

Was sind eure meinungen?
Gast #4988845
Lesenswert?

Εrnst B. schrieb:
> HolgerKraehe schrieb:
> Was sind eure meinungen?
>
> Ist das nicht mehr oder weniger 1:1 das Konzept hinter QTQuick / QML,
> was auch für Embedded eingesetzt werden kann?
>
> => Das Rad nicht ohne Grund neu erfinden.

Genau deshalb frage ich hier nach.
Ich habe sicher 1-2h recherchiert nach eifach zu integrierenden gui 
lösungen im embedded Bereich, welche OHNE F4 und F7 auskommen.

Übrig blieb uGFX uGUI und uTFT
Leider alle wenig befriedigend wobei uGFX wohl noch am brauchbarsten 
war.

QTQuick kannte ich noch nicht. Dass muss ich gleich mal noch googlen
Gast #4988854
Lesenswert?

QT Quick benötigt open GL unterstützung. QT Lite scheint eine Version zu 
sein welche einen 2D Renderer hat, jedoch finde ich keinen code von QT 
Lite und auch die demo boards haben einen F7 mit 16MB flash und 16 Mb 
RAM
OP #4989679
Lesenswert?

Hallo zusammen

Habe heute mal ein wenige mit dem Lexer angefangen, welcher die Token 
erkennen sollte.

Grundlage ist weiterhin das Skript vom ersten post.

Bevor ich nun zu sehr mit dem Coden beginne, möchte ich mal kurz ein 
Feedback einholen.

Was meint ihr?

Danke
1
struct token
2
{
3
  int type;
4
  int pos;
5
  char string[100];
6
};
7

8

9
int selection = 0;
10
int size = 0;
11
char buffer[1000];
12
int tokenCount = 0;
13
token tokenList[1000];
14

15
enum {START, END, CLOSE, RESERVED, VALUE};
16

17
char *Identifier[] = { "<", ">", "</", "div", "class=", "style=" };
18
char IdType[] = { START, END, CLOSE, RESERVED, RESERVED, RESERVED};
19

20

21
int checkForIdentifier(int start, char *buffer)
22
{
23
  int i = 0;
24
  int state = 0;
25
  char tmp[50];
26

27
  //Gehe an aktueller Zeichenposition alle Identifier durch. 
28
  while ((i != 6) && (state != 1))
29
  {
30
    //Kopiere vom Buffer, die anzahl Zeichen des Identifiers.
31
    strncpy(tmp, &buffer[start], strlen(Identifier[i]));
32
    tmp[strlen(Identifier[i])] = 0; //tmp Buffer null terminieren
33

34
    //Vergleiche den identifier mit dem tmp string.
35
    if (strcmp(tmp, Identifier[i]) == 0)
36
    {
37
      //Wenn sie identisch sind, wurde ein token gefunden. 
38
      state = 1; //token gefunden
39

40
      tokenList[tokenCount].type = IdType[i];
41
      tokenList[tokenCount].pos = start;
42
      strcpy(tokenList[tokenCount].string, tmp);
43
      tokenCount++;
44

45
      //Wir geben die anzahl zeichen zurück, welche übersprungen werden können. 
46
      return strlen(Identifier[i]);
47
    }
48
    //Noch kein Token gefunden? gehe zum nächsten identifier
49
    i++;
50
  }
51
  //Es wurde kein token gefunden?
52
  //Dann müssten hier wohl values zu finden sein. 
53
  //Ab hier bis zum nächsten token. 
54

55
  return 0;
56
}
57

58

59
void tokenize(char *buffer)
60
{
61
  int pos = 0;
62
  int res = 0;
63
  //Gehe solange durch, wie der inputstring lang ist. 
64
  while (pos < strlen(buffer))
65
  {
66
    //Ergebnis entspricht der anzahl zu überspringenden zeichen. 
67
    res = checkForIdentifier(pos, buffer);
68

69
    if (res != 0)
70
    {
71
      pos += res;
72
    }
73
    else
74
    {   //Kein ergebnis, bzw. 0 => kein Token. beginne beim nächsten zeichen. 
75
      pos++;
76
    }
77
  }
78
}
#4989850
Lesenswert?

Das ist schonmal ein guter Ansatz. Aber eventuell solltest du nicht für 
jeden möglichen Tag und jedes mögliche Attribut einen neuen Token 
einführen, aber das hängt natürlich von den Anforderungen und den 
benötigten Infos ab. Um HTML richtig parsen zu können braucht man 
eigentlich noch Informationen ob ein Tag selfclosing ist oder nicht oder 
jenachdem (z.B. <input>, welches als <input/> interpretiert werden muss, 
oder <div/></div>, dass als <div></div> gelesen werden muss, etc.)
Und dann gibt es noch optionale Endtags (<div><p>a<p>b</div> ist das 
selbe wie <div><p>a</p><p>b</p></div>), und dann gibt es noch nicht 
erlaubte Unterelemente je nach Element...
#4990065
Lesenswert?

Ich würde mir ganz ganz am Anfang die Frage stellen, ob es notwendig 
ist, die Oberfläche ohne Neu-Flashen des µCs auszutauschen.

Falls nein: Mach das ganze XML-Processing, Layout, ... auf dem 
Host-System während des Compilierens.

d.H. Präprozessor der dein Layout-XML zur Compile-Time in C(++)-Code, 
ein statisches Array-of-Struct oder sonstwas übersetzt.

Also so ähnlich wie der UIC von QT.
#4990488
Lesenswert?

Bin ich altmodisch oder geht es noch anderen hier so daß sie die 
Text(!)-Auszeichnugssprache HTML für die denkbar umständlichste und auch 
mit Abstand aufgeblasenste Methode überhaupt halten um sie dafür zu 
vergewaltigen eine graphische Benutzeroberfläche zu beschreiben und die 
dabei entstandene Tag- und Attribut-Suppe dann hinterher wieder in was 
handhabbares zu parsen und irgendwie darzustellen? Wo ist der 
Pragmatismus geblieben, an welcher Stelle ging er verloren?
#4990636
Lesenswert?

HolgerKraehe schrieb:
> Es geht darum, eine Beschreibungssprache für embedded Guis zu haben.
>
> Es geht nicht darum, vollständige websites darzustellen. Sondern darum,
> etwas bestehendes zu verwenden.
>
> Editoren für html und css gibts wie sand am meer. Weshalb nicht damit
> guis designen?

Geht doch. Nur passender... QML oder XAML.
XAML gibt's immer noch in Form des .NET Microframeworks für 
Mikrocontroller. Seit einiger Zeit auch mit LLVM/native Code 
https://github.com/NETMF/llilum (M3/M4)

>
> Der c interpreter zeichnet dann zb bei einem div der klasse button einem
> button. Farbe etc wird im css definiert.
>
> Fast wie eine webseite aber halt sehr sehr vereinfacht aber mit der
> maximalen flexibilität.
>
> Evtl gibt es auch bessere beschreibungssprachen für sowas.
>
> Was sind eure meinungen?

Warum in einem Interpreter jedes mal den ganzen Kram parsen, validieren, 
eventuell cachen damit's nicht zu lahm wird etc.? Wenn, dann würde ich 
aus den verbreiteten Beschreibungssprachen wie QML, XAML oder HTML was 
besser für Mikrocontroller verarbeitbares generieren.
Wenn's XML sein muss: Der XML-Reader des NetMF wäre z.B.
https://github.com/NETMF/netmf-interpreter/tree/03d84fe76e0b666ebec62d17d69c55c45940bc40/CLR/Core/Xml

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren