Pandoc creates me a table of width 33%, why? - html-table

The markdown:
| Symbol | Beschreibung |
|--------|--------------|
| ![Erfolgskriterium erfüllt](/assets/reports/audit/signal_ok.jpg) | Wenn ein Erfolgskriterium erfüllt ist, so wurden bei den Tests alle gefundenen Fälle richtig umgesetzt gefunden. Keine weiteren Massnahmen sind nötig. |
| ![Erfolgskriterium nicht erfüllt](/assets/reports/audit/signal_not_ok.jpg) | Wenn ein Erfolgskriterium nicht erfüllt ist, so wurden bei den Tests Fälle gefunden, die das Kriterium nicht in der verlangten Art und Weise erfüllen. Beispiele für Probleme werden aufgeführt. Nötige Massnahmen werden aufgeführt oder es wird zu weiterführenden Quellen verwiesen. |
Result:
<table style="width:33%;">
<caption>Bewertungen und Symbole</caption>
<colgroup>
<col width="12%">
<col width="20%">
</colgroup>
<thead>
...
I'd like to have a table with auto width by default. How can this be achieved?

From the Pandoc README on pipe tables:
If a pipe table contains a row whose printable content is wider than the column width (see --columns), then the cell contents will wrap, with the relative cell widths determined by the widths of the separator lines.
The idea of markdown is to make it look nice in the source as well, for example with multiline tables you can control the column widths as well:
---------------------------------------------------------------
Symbol Beschreibung
------ ---------------
![Erfolgskriterium Wenn ein Erfolgskriterium erfüllt
erfüllt][ok] ist, so wurden bei den Tests alle
gefundenen Fälle richtig umgesetzt
efunden. Keine weiteren Massnahmen
sind nötig.
![Erfolgskriterium Wenn ein Erfolgskriterium nicht
nicht erfüllt][not_ok] erfüllt ist, so wurden bei den Tests
Fälle gefunden, die das Kriterium
nicht in der verlangten Art und Weise
erfüllen. Beispiele für Probleme
werden aufgeführt. Nötige Massnahmen
werden aufgeführt oder es wird zu
weiterführenden Quellen verwiesen.
---------------------------------------------------------------
[ok]: /assets/reports/audit/signal_ok.jpg
[not_ok]: /assets/reports/audit/signal_not_ok.jpg
If you really, really don't want column widths, you'd have to use simple tables, but they don't allow multiline text. Or write a pandoc filter to remove the widths.

I'd like to have a table with auto width by default. How can this be achieved?
Increase the widths of the separator lines between the header row and content rows.
Pandoc Manual: pipe_tables section only briefly mentions how the table separator lines affect relative column widths.
If a pipe table contains a row whose printable content is wider than the column width (see --columns), then the cell contents will wrap, with the relative cell widths determined by the widths of the separator lines.
Experimentally, one can find that the widths of the separator lines also affects the overall table width.
In my case (pandoc 1.19.1), the following markdown has the overall separator line widths increased from the question example above …
| Symbol | Beschreibung |
|----------------------|------------------------------------------------------------------|
| ![Erfolgskriterium erfüllt](/assets/reports/audit/signal_ok.jpg) | Wenn ein Erfolgskriterium erfüllt ist, so wurden bei den Tests alle gefundenen Fälle richtig umgesetzt gefunden. Keine weiteren Massnahmen sind nötig. |
| ![Erfolgskriterium nicht erfüllt](/assets/reports/audit/signal_not_ok.jpg) | Wenn ein Erfolgskriterium nicht erfüllt ist, so wurden bei den Tests Fälle gefunden, die das Kriterium nicht in der verlangten Art und Weise erfüllen. Beispiele für Probleme werden aufgeführt. Nötige Massnahmen werden aufgeführt oder es wird zu weiterführenden Quellen verwiesen. |
… generates the following html table…
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 74%" />
</colgroup>
<thead>
<tr class="header">
<th>Symbol</th>
<th>Beschreibung</th>
</tr>
… which has no width contraint on the table itself.
The resulting table, in this case, spans the window. And, the column content reflows nicely as the window width changes.

You might hate me. But why not removing the <colgroup> using javascript?
Its not really the clean way but before you force yourself to change the table style, this might have other side effects that you dont want, using this easy solution will also work.
And it wont *ck up your markdown with heavy table syntax.

Just apply some more CSS to overwrite current CSS.
pandoc "--variable=include-before:<style>body > table > colgroup > col { width: unset!important }</style>"
This will insert one more line directly after html body-tag inside the output document, which selects all body > table > colgroup > col elements and overwrite their width setting.

Related

Formatting a CString in currency while typing in a edit box

I want to format a CString string in a currency while typing in a edit box using VISUAL C++ ... but I can't find a solution which works definitely...
typing for instance the first digit (i.e. 5), in the edit box it must appear 5,00 , typing the second digit 50,00 (the cursor must always be before the comma)... typing 56234 it must be 56.234,00 , typing the , the cursor must go after the comma position and it mustn't appear twice or more times of course... and writing i.e 5,65 it must appear 5,65
This is my code, but it doesn't work perfectly:
there's a variabile CString testo and a variable valuta which controls the edit box
void CCampovalutaDlg::OnEnChangeEdit1()
{
// TODO: Se si tratta di un controllo RICHEDIT, il controllo non
// invierà questa notifica a meno che non si esegua l'override della funzione CDialogEx::OnInitDialog()
// e venga eseguita la chiamata a CRichEditCtrl().SetEventMask()
// con il flag ENM_CHANGE introdotto dall'operatore OR nella maschera.
// TODO: Aggiungere qui il codice del gestore di notifiche del controllo
CString str = _T("0123456789");
CString comma = _T(",");
UpdateData();
testo.Replace(_T("."), _T(""));
if (testo.GetLength() > 3) testo.Insert(testo.GetLength() - 2, _T("."));
double cur = _wtof(testo);
if (testo.GetLength() == 1) testo.Format(_T("%.2f"), cur);
if (testo.FindOneOf(str) != -1) {
for (int i = testo.GetLength() - 6; i > 0; i -= 3) {
testo.Insert(i, _T("."));
}
}
UpdateData(FALSE);
valuta.SetSel(testo.GetLength() - 3, testo.GetLength() - 3);
}
Thanks for solving my problem
If I press the , it appears and the testo.Format doesn't make it appear a comma but a dot. And I can't type the decimal digits :-(

Flutter fetch data from SQLite into Object/Model

I have a project where I have to display in a listview some recipes. Those recipes I want to fetch from a sqlite database.I tried some different ways and I am able to get the Data but dont know how to get it into the model. Everything is working fine, when I hardcode all the recipes into my model(recipe.dart):
import './ingredient.dart';
/// Represents a Recipe.
class Recipe {
final int id;
final String name;
final String imagePath;
final String preperation;
final List<Ingredient> ingredients;
Recipe(
this.id, this.name, this.preperation, this.imagePath, this.ingredients);
static List<Recipe> fetchAll() {
int id = 0;
String title = "Spaghettti";
return [
Recipe(
id,
title,
"Das Hackfleisch für die Burger vorbereiten. Mit Salz und Pfeffer würzen und in die Form von Burgerpatties bringen. Von beiden Seiten scharf anbraten. Kurz vor Ende den Käse auf die Hackfleischteile legen und schmelzen lassen. Den Speck kross braten und die Hälfte der Zwiebelscheiben leicht glasig dünsten. Die Eier als Spiegeleier auf einer Seite braten. Das Eigelb muss noch flüssig sein. In der Zwischenzeit die Burgerbrötchen halbieren und im Ofen bei ca. 180 °C ungefähr 5 Minuten vorwärmen. Wenn alles fertig ist, den Burger in der folgenden Reihenfolge belegen: Auf der Brötchenunterseite Ketchup, Mayonnaise und Senf verteilen. Das Salatblatt Tomaten, rohe Zwiebelringe, Hackfleisch mit dem Käse, Speckscheiben, Spiegelei, angedünstete Zwiebeln, Ananas und die Rote Beete auftürmen und mit dem Brötchenoberteil abschließen. Alles mit einem Holzsticker fixieren und servieren",
'assets/images/spaghetti2.jpg', [
Ingredient('Tomaten Soße', '50 ml '),
Ingredient('Nudeln', '200 g '),
]),
Recipe(
1,
'Pizza',
"Das Hackfleisch für die Burger vorbereiten. Mit Salz und Pfeffer würzen und in die Form von Burgerpatties bringen. Von beiden Seiten scharf anbraten. Kurz vor Ende den Käse auf die Hackfleischteile legen und schmelzen lassen. Den Speck kross braten und die Hälfte der Zwiebelscheiben leicht glasig dünsten. Die Eier als Spiegeleier auf einer Seite braten. Das Eigelb muss noch flüssig sein. In der Zwischenzeit die Burgerbrötchen halbieren und im Ofen bei ca. 180 °C ungefähr 5 Minuten vorwärmen. Wenn alles fertig ist, den Burger in der folgenden Reihenfolge belegen: Auf der Brötchenunterseite Ketchup, Mayonnaise und Senf verteilen. Das Salatblatt Tomaten, rohe Zwiebelringe, Hackfleisch mit dem Käse, Speckscheiben, Spiegelei, angedünstete Zwiebeln, Ananas und die Rote Beete auftürmen und mit dem Brötchenoberteil abschließen. Alles mit einem Holzsticker fixieren und servieren",
'assets/images/Pizza.jpg', [
Ingredient('Teig', '500 g '),
Ingredient('Nudeln', '200 g '),
]),
Recipe(
2,
'Burger',
"Das Hackfleisch für die Burger vorbereiten. Mit Salz und Pfeffer würzen und in die Form von Burgerpatties bringen. Von beiden Seiten scharf anbraten. Kurz vor Ende den Käse auf die Hackfleischteile legen und schmelzen lassen. Den Speck kross braten und die Hälfte der Zwiebelscheiben leicht glasig dünsten. Die Eier als Spiegeleier auf einer Seite braten. Das Eigelb muss noch flüssig sein. In der Zwischenzeit die Burgerbrötchen halbieren und im Ofen bei ca. 180 °C ungefähr 5 Minuten vorwärmen. Wenn alles fertig ist, den Burger in der folgenden Reihenfolge belegen: Auf der Brötchenunterseite Ketchup, Mayonnaise und Senf verteilen. Das Salatblatt Tomaten, rohe Zwiebelringe, Hackfleisch mit dem Käse, Speckscheiben, Spiegelei, angedünstete Zwiebeln, Ananas und die Rote Beete auftürmen und mit dem Brötchenoberteil abschließen. Alles mit einem Holzsticker fixieren und servieren",
'assets/images/burger.jpg', [
Ingredient('Burger Brötchen', '2'),
Ingredient('Salat', '50 g '),
]),
];
}
static Recipe fetchByID(int recipeID) {
List<Recipe> recipes = Recipe.fetchAll();
for (var i = 0; i < recipes.length; i++) {
if (recipes[i].id == recipeID) {
return recipes[i];
}
}
return null;
}
}
As you can see it contains an id, a name,an image path,a preperation, and a list of ingredients which is also a model(ingredient.dart):
class Ingredient {
final String ingredientTitle;
final String amount;
Ingredient(this.ingredientTitle, this.amount);
}
Because everything still works when I add a or delete a recipe in the fetchAll() function I think its enough to just edit this one. But my database is a bit more complex structured it contains 4 tables:
Thats my really ugly table schema with one example. As you can see every ID without the Zutat_ID references to Rezept_ID of the first table. My question is how can I fetch all recipes of the Database into the model? I hope you can understand the question and help me. Thank you!
I think you're looking for something like this:
Future<List<Recipe>> recipes() async {
// Get a reference to the database.
final Database db = await database;
// Query the table for all The Recipes.
final List<Map<String, dynamic>> maps = await db.query('recipe');
// Convert the List<Map<String, dynamic> into a List<Recipe>.
return List.generate(maps.length, (i) {
return Recipe(
id: maps[i]['id'],
name: maps[i]['name'],
// Same for the other properties
);
});
}
I hope this helps.

Delphi Apache Link Module request canceled out of memory

i have developed an Apache link module in Delphi, which also contains an upload function via a WebActionItem(Multipart form data).
The upload also works correctly as long as the client does not cancel the request.
However, if the request is aborted, the memory of the httpd.exe will increase continuously.
Within a few seconds the memory reaches the maximum 8 GB and the child-process of Apache is killed.
The strange thing is that my upload function is not reached at all if a request get canceled by the client.
Only the initialization of the WebModule is called when a request comes in.
My questions:
Does Apache take care of the upload of the file and passes it to the Delphi WebModule?
How can I intervene if my upload function in the WebModule is not called at all when a request is aborted by the client?
I am very grateful for any hints, because I'm looking for a solution since hours.
Edit:
Example for dpr-File:
library mod_restserver;
uses
{$IFDEF MSWINDOWS}
Winapi.ActiveX,
System.Win.ComObj,
{$ENDIF }
Web.WebBroker,
Web.ApacheApp,
Web.HTTPD24Impl,
Data.DBXCommon,
Datasnap.DSSession,
RESTServer.Service.WebModules in 'RESTServer.Service.WebModules.pas' {webModul: TWebModule};
// httpd.conf-Einträge:
//
(*
LoadModule webbroker_module modules/mod_restserver.dll
<Location /rest>
SetHandler mod_restserver-handler
</Location>
*)
//
// Diese Einträge setzen voraus, dass das Ausgabeverzeichnis für dieses Projekt das apache/modules-Verzeichnis ist.
//
// httpd.conf-Einträge sollten unterschiedlich sein, wenn das Projekt auf eine der folgenden Weisen geändert wird:
// 1. Der Name der Variable TApacheModuleData wird geändert.
// 2. Das Projekt wird umbenannt.
// 3. Das Ausgabeverzeichnis ist nicht das Verzeichnis apache/modules.
// 4. Die Erweiterung der dynamischen Bibliothek ist von der Plattform abhängig. Verwenden Sie für Windows .dll und für Linux .so.
//
// Exportierte Variable deklarieren, damit Apache auf dieses Modul zugreifen kann.
var
GModuleData: TApacheModuleData;
exports
GModuleData name 'webbroker_module';
procedure TerminateThreads;
begin
TDSSessionManager.Instance.Free;
Data.DBXCommon.TDBXScheduler.Instance.Free;
end;
begin
{$IFDEF MSWINDOWS}
CoInitFlags := COINIT_MULTITHREADED;
{$ENDIF}
Web.ApacheApp.InitApplication(#GModuleData);
Application.Initialize;
Application.WebModuleClass := WebModuleClass;
TApacheApplication(Application).OnTerminate := TerminateThreads;
Application.Run;
end.
And example for the webmodule:
unit RESTServer.Service.WebModules;
interface
uses
{$IFDEF MSWINDOWS}
Winapi.ActiveX,
System.Win.ComObj,
{$ENDIF }
System.SysUtils, System.Classes,
Web.HTTPApp, Web.WebFileDispatcher, Web.HTTPProd,
Datasnap.DSHTTPWebBroker, Datasnap.DSServer, DataSnap.DSAuth, Datasnap.DSCommonServer,
IPPeerServer, IdContext, Datasnap.DSHTTP, ReqMulti, JSON, System.IOUtils;
type
TwebModul = class(TWebModule)
dsServer: TDSServer;
procedure WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure webModulfileUploadAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
WebModuleClass: TComponentClass = TwebModul;
implementation
{$R *.dfm}
uses
Web.WebReq, Datasnap.DSSession;
procedure TwebModul.WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content :=
'{"return":-1, "result":0, "msg":"ressource unknown"}';
end;
procedure TwebModul.webModulfileUploadAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
joResponse: TJSONObject;
iCount,
iReturn, iResult: Integer;
sPath, s: String;
aFile: TAbstractWebRequestFile;
ms: TMemoryStream;
begin
joResponse := TJSONObject.Create;
iReturn := 0;
iResult := 0;
try
try
if Request.Files.Count > 0 then
begin
for iCount := 0 to Request.Files.Count - 1 do
begin
aFile := Request.Files.Items[iCount];
ms := TMemoryStream.Create;
try
sPath := 'C:\Data\test.txt';
//if not DirectoryExists(sPath) then
// TDirectory.CreateDirectory(sPath);
aFile.Stream.Position := 0;
ms.CopyFrom(aFile.Stream, aFile.Stream.Size);
ms.SaveToFile(sPath);
finally
ms.free;
end;
Inc(iResult);
end;
end;
except
on E: Exception do
begin
s := E.Message;
iReturn := 2;
iResult := 0;
end;
end;
finally
joResponse.AddPair(TJSONPair.Create('return', TJSONNumber.Create(iReturn)));
joResponse.AddPair(TJSONPair.Create('result', TJSONNumber.Create(iResult)));
Response.ContentType := 'application/json; charset=utf-8';
Response.Content := joResponse.ToJSON;
end;
end;
initialization
CoInitialize(nil);
finalization
CoUninitialize;
end.

Shift Reduce Error In YACC

I am working with lex and yacc. following is the program for lex and yacc calculator. while excuting yacc file. Please help me soving this problem . i am getting following errors:
This is the error:
conflicts: 20 shift/reduce
//YACC program
%{
#include<stdio.h>
#include<math.h>
extern void printsymbol();
struct symboltable
{
char name[20];
double value;
}ST[20];
%}
%union
{
double p;
}
%token <p> NUM
%token <p> IDENTIFIER
%token SIN COS TAN ROOT
%left '+' '-'
%left '*' '/'
%type <p> E
%%
Edash:E';'{printf("\n=%f",$1);printsymbol();}
|Edash E';'{printf("\n=%f",$2);printsymbol();}
E: E'+'E {$$=$1+$3;}
|E'-'E {$$=$1-$3;}
|E'*'E {$$=$1*$3;}
|E'/'E {$$=$1/$3;}
|NUM {$$=$1;}
|IDENTIFIER {$$=ST[(int)]$1.value;}
|'('E')' {$$=$2;}
|IDENTIFIER'='E {$$=ST[(int)]$1.value=$3;}
|SIN E {$$=sin($2*3.141/180);}
|COS E {$$=sin($2*3.141/180);}
|TAN E {$$=sin($2*3.141/180);}
|ROOT E {$$=sqrt($2);}
%%
int main()
{
yyparse();
}
yyerror()
{
printf("Error Found..!");
}
Your conflicts come from the rules:
|IDENTIFIER '=' E
|SIN E
|COS E
|TAN E
|ROOT E
Because none of these rules have precedences set for them (not set on any of the tokens in these rules), when you get an input like SIN X + Y, the parser doesn't know whether to
parse it as(SIN X) + Y or SIN (X + Y)
You can fix it by setting precedences for all these rules, which is most easily done by adding a line
%nonassoc '=' SIN COS TAN ROOT
setting precedence values for all of those tokens, which will be inherited by the rules. Its up to you whether they should be higher or lower precedence than the binary operators. For normal conventions, you probably want = as lower precedence and the functions as higher precedence (which means you actually need two new lines rather than having them all in one line)
You must run yacc with the -v option to generate a file called y.output. There you can find clues about the conflicts. The file shows the detailed states of the generated parser, and which states have conflicts in them between shifting a particular token or reducing via some rule.
A possible issue with your grammar is this:
E : IDENTIFIER '=' E
Suppose you have you have
X = 3 + 5
what is the precedence of = versus +? If the parser has just seen X = 3 and the next lookahead token is +, what should it do? Should it reduce X = 3 to E by the rule E : IDENTIFIER '=' E or should it shift the + and continue scanning a longer right-hand-side E?
Look at y.output and see if it confirms this hypothesis.

break with gdb on label in ObjectiveC

can I have gdb break on the label "gdbStatement:" in this example Code:
...
op1 = op2 = op3 = op4 = nil;
op1 = [ops firstObject];
if(jj>1)op2 = [ops oai:1];
if(jj>2)op3 = [ops oai:2];
if(jj>3)op4 = [ops oai:3];
gdbStatement:
// Wertzuweisungen
if([stmt isZuweisung]){
// ausser bei mutable Targets, die erweitert werden oder im Fehlerfall hier drin kein continue, weil am Ende s1 weiterverarbeitet wird;
NSString *val1,*s1;
double varVal=0;
...
I know how to break on line numbers and functions. But can't find how to break on labels.
FSF or apple gdb? The below applies to FSF gdb.
Assuming that the code is in a method, there appears to be no way to specify a breakpoint on a label in a method,
The syntax for specifying a breakpoint on a label is break function:label
but the Objective-C linespec parser in FSF gdb does not parse this, so break -[aClass aMethod]:aLabel doesn't work
One could reasonably assume that you could mangle the method specify a function breakpoint on the symbol name, like 'break _i_aClass__aMethod:label', but that doesn't currently work either for a reason I do not yet understand.
tried with gdb 7.3 and 7.6.