/** * Resolves the line breaking class for certain ambiguous or complicated * characters. They are treated in a simplistic way in this * implementation. * * @param lbc line breaking class to resolve * @param lang language of the text * @return the resolved line breaking class */ static enum LineBreakClass resolve_lb_class( enum LineBreakClass lbc, const char *lang) { switch (lbc) { case LBP_AI: if (lang != NULL && (strncmp(lang, "zh", 2) == 0 || /* Chinese */ strncmp(lang, "ja", 2) == 0 || /* Japanese */ strncmp(lang, "ko", 2) == 0)) /* Korean */ { return LBP_ID; } else { return LBP_AL; } case LBP_CJ: /* `Strict' and `normal' line breaking. See * <url:http://www.unicode.org/reports/tr14/#CJ> * for details. */ if (ENDS_WITH(lang, "-strict")) { return LBP_NS; } else { return LBP_ID; } case LBP_SA: case LBP_SG: case LBP_XX: return LBP_AL; default: return lbc; } }
int main (int argc, char *argv[]) { // gtk_set_locale (); gtk_init (&argc, &argv); { /* Add the Balsa installation dir (or BALSAHOME/share) as the first path element */ char *balsaHome = getenv ("BALSAHOME"); char *shareDir; if (!balsaHome) balsaHome = BALSAHOME; shareDir = g_strconcat (balsaHome, "/share", NULL); LibBreeze_AddIncludePath (shareDir); g_free (shareDir); } /* Add the current directory as the secondpath element */ char *currentDir = g_get_current_dir (); LibBreeze_AddIncludePath (currentDir); setvbuf (stdout, NULL, _IOLBF, 0); if (argc < 2) { printf ("Usage: %s [<options>] file\n" " All options are parsed, used if recognised, and passed to breeze-sim.\n" " Recognised options:\n" " -I (--include) <dir>\n" " -k (--keep-channel-numbers)\n" " -l (--layout) <filename>\n" " -p (--part) <part name>\n", *argv); exit (EXIT_FAILURE); } int i; for (i = 1; i < argc - 1; i++) { if (BEGINS_WITH (argv[i], "-I") || BEGINS_WITH (argv[i], "--include")) { if (!argv[i + 1]) { fprintf (stderr, "Usage: -I <dir>\n"); exit (EXIT_FAILURE); } LibBreeze_AddIncludePath (argv[i + 1]); i++; } else if (BEGINS_WITH (argv[i], "-k") || BEGINS_WITH (argv[i], "--keep-channel-numbers")) { save_channel_numbers = TRUE; } else if (BEGINS_WITH (argv[i], "-l") || BEGINS_WITH (argv[i], "--layout")) { if (!argv[i + 1]) { fprintf (stderr, "Usage: -l (--layout) <filename>\n"); exit (EXIT_FAILURE); } layoutFilename = g_strdup (argv[i + 1]); i++; } else if (BEGINS_WITH (argv[i], "-p") || BEGINS_WITH (argv[i], "--part")) { if (!argv[i + 1]) { fprintf (stderr, "Usage: -p (--part) <part name>\n"); exit (EXIT_FAILURE); } partName = g_strdup (argv[i + 1]); i++; } } projectName = g_strdup (argv[argc - 1]); TryParsingScript (projectName, 1); if (ENDS_WITH (projectName, ".breeze")) projectName[strlen (projectName) - strlen (".breeze")] = 0; projectNameWithPath = g_strdup_printf ("%s/%s", currentDir, projectName); g_free (currentDir); breezesim_passedArgs = g_new0 (char *, argc - 2); memcpy (breezesim_passedArgs, argv + 1, (argc - 2) * sizeof (char *)); breezesim_passedArgCount = argc - 2; if (CheckForSameSimulationRunning ()) { GtkWidget *msg = create_BreezeSimCtrlAlreadyRunning (); gtk_widget_show (msg); pidFilename = 0; } else main_finish_initialisation (); gtk_main (); if (pidFilename) remove (pidFilename); return 0; }