Skip to content

Instantly share code, notes, and snippets.

@unix-junkie
Created December 18, 2015 16:32
Show Gist options
  • Save unix-junkie/68bdf8420d6c7b7925f4 to your computer and use it in GitHub Desktop.
Save unix-junkie/68bdf8420d6c7b7925f4 to your computer and use it in GitHub Desktop.
#include <stdlib.h>
#include <wchar.h>
#include <Xm/XmAll.h>
void addLine(Widget parent,
char *keyWidgetName,
char *keyLabel,
char *valueWidgetName,
const XmString valueLabel);
int main(int argc, char *argv[]) {
XtAppContext appContext;
const char *applicationClass = "XmUnicodeTest";
String fallbackResources[] = {
"*.labelSingleByte.fontList: -monotype-arial-medium-r-normal--*-90-*-*-p-*-microsoft-cp1251",
"*.labelUnicode.fontList: -monotype-arial-medium-r-normal--*-90-*-*-p-*-iso10646-1",
NULL,
};
const Widget topLevel = XtVaAppInitialize(&appContext, applicationClass, NULL, 0, &argc, argv, fallbackResources, NULL);
const Widget mainWindow = XmCreateMainWindow(topLevel, "mainWindow", NULL, 0);
XtManageChild(mainWindow);
const Widget rowColumn = XmCreateRowColumn(mainWindow, "rowColumn", NULL, 0);
XtManageChild(rowColumn);
XtVaSetValues(rowColumn, XmNpacking, XmPACK_COLUMN, NULL);
XtVaSetValues(rowColumn, XmNorientation, XmHORIZONTAL, NULL);
const XmStringCharSet unicodeCharset = "UTF-8";
char *mbs = "Sample Text \u0410\u0411\u0412\u0413\u0414\u0415\u0401";
wchar_t *wcs = L"Sample Text \u0410\u0411\u0412\u0413\u0414\u0415\u0401";
char *singleByteLabelClass = "labelSingleByte";
char *unicodeLabelClass = "labelUnicode";
int columnCount = 0;
{
const XmString labelString = XmStringCreate(mbs, unicodeCharset);
addLine(rowColumn, "key", "XmStringCreate(multi-byte string, \"UTF-8\"), UTF-8 font:", unicodeLabelClass, labelString);
XmStringFree(labelString);
columnCount++;
}
{
const XmString labelString = XmStringCreateLtoR(mbs, unicodeCharset);
addLine(rowColumn, "key", "XmStringCreateLtoR(multi-byte string, \"UTF-8\"), UTF-8 font:", unicodeLabelClass, labelString);
XmStringFree(labelString);
columnCount++;
}
{
const XmString labelString = XmStringGenerate(mbs, NULL, XmMULTIBYTE_TEXT, NULL);
addLine(rowColumn, "key", "XmStringGenerate(XmMULTIBYTE_TEXT), CP1251 font:", singleByteLabelClass, labelString);
XmStringFree(labelString);
columnCount++;
}
{
const XmString labelString = XmStringGenerate(wcs, NULL, XmWIDECHAR_TEXT, NULL);
addLine(rowColumn, "key", "XmStringGenerate(XmWIDECHAR_TEXT), CP1251 font:", singleByteLabelClass, labelString);
XmStringFree(labelString);
columnCount++;
}
{
const XmString labelString = XmStringGenerate(mbs, NULL, XmMULTIBYTE_TEXT, NULL);
addLine(rowColumn, "key", "XmStringGenerate(XmMULTIBYTE_TEXT), UTF-8 font:", unicodeLabelClass, labelString);
XmStringFree(labelString);
columnCount++;
}
{
const XmString labelString = XmStringGenerate(wcs, NULL, XmWIDECHAR_TEXT, NULL);
addLine(rowColumn, "key", "XmStringGenerate(XmWIDECHAR_TEXT), UTF-8 font:", unicodeLabelClass, labelString);
XmStringFree(labelString);
columnCount++;
}
XtVaSetValues(rowColumn, XmNnumColumns, columnCount, NULL); // For XmHORIZONTAL orientation, this is actually a number of rows
XtRealizeWidget(topLevel);
XtAppMainLoop(appContext);
return 0;
}
void addLine(Widget parent,
char *keyWidgetName,
char *keyLabel,
char *valueWidgetName,
const XmString valueLabel) {
const Widget label0 = XmCreateLabel(parent, keyWidgetName, NULL, 0);
XtManageChild(label0);
const XmString labelString0 = XmStringCreate(keyLabel, XmSTRING_DEFAULT_CHARSET);
XtVaSetValues(label0, XmNlabelString, labelString0, NULL);
XmStringFree(labelString0);
const Widget label1 = XmCreateLabel(parent, valueWidgetName, NULL, 0);
XtManageChild(label1);
XtVaSetValues(label1, XmNlabelString, valueLabel, NULL);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment