* @param data input string
* @return a char representing the type of token returned
*
- * The possible return values are :
- * + stretch indicator for glue length
+ * The possible return values are :
+ * + stretch indicator for glue length
* - shrink indicator for glue length
* n a numeric value (stored in number array)
* u a unit type (stored in unit array)
if (number_index > 3) return 'E';
string buffer;
-
+
// we have found some number
if (i == string::npos) {
buffer = data;
return 'n';
} else return 'E';
}
-
+
i = data.find_first_not_of("abcdefghijklmnopqrstuvwxyz%");
if (i != 0) {
if (unit_index > 3) return 'E';
string buffer;
-
+
// we have found some alphabetical string
if (i == string::npos) {
buffer = data;
break;
}
// end of hack
-
+
int pattern_index = 0;
int table_index = 0;
char pattern[20];
if (!*table[table_index].pattern)
return false;
}
-
+
// Get the values from the appropriate places. If an index
// is zero, the corresponding array value is zero or UNIT_NONE,
// so we needn't check this.
break;
}
// end of hack
-
+
number_index = unit_index = 1; // entries at index 0 are sentinels
// construct "pattern" from "data"
pattern[pattern_index] = '\0';
// only the most basic pattern is accepted here
- if (compare(pattern, "nu") != 0) return false;
-
+ if (compare(pattern, "nu") != 0) return false;
+
// It _was_ a correct length string.
// Store away the values we found.
if (result) {
string const VSpace::asLatexCommand(BufferParams const & params) const
{
+ string ret;
+
switch (kind_) {
- case NONE: return string();
+ case NONE:
+ break;
case DEFSKIP:
- return params.getDefSkip().asLatexCommand(params);
- case SMALLSKIP: return keep_ ? "\\vspace*{\\smallskipamount}"
- : "\\smallskip{}";
- case MEDSKIP: return keep_ ? "\\vspace*{\\medskipamount}"
- : "\\medskip{}";
- case BIGSKIP: return keep_ ? "\\vspace*{\\bigskipamount}"
- : "\\bigskip{}";
- case VFILL: return keep_ ? "\\vspace*{\\fill}"
- : "\\vfill{}";
- case LENGTH: return keep_ ? "\\vspace*{" + len_.asLatexString() + '}'
- : "\\vspace{" + len_.asLatexString() + '}';
+ ret = params.getDefSkip().asLatexCommand(params);
+ break;
+ case SMALLSKIP:
+ ret = keep_ ? "\\vspace*{\\smallskipamount}"
+ : "\\smallskip{}";
+ break;
+ case MEDSKIP:
+ ret = keep_ ? "\\vspace*{\\medskipamount}"
+ : "\\medskip{}";
+ break;
+ case BIGSKIP:
+ ret = keep_ ? "\\vspace*{\\bigskipamount}"
+ : "\\bigskip{}";
+ break;
+ case VFILL:
+ ret = keep_ ? "\\vspace*{\\fill}"
+ : "\\vfill{}";
+ break;
+ case LENGTH:
+ {
+ string const lenstr = len_.asLatexString();
+
+ ret = keep_ ? "\\vspace*{" + lenstr + '}'
+ : "\\vspace{" + lenstr + '}';
+ }
+ break;
+
}
-
- lyx::Assert(0);
+
+ return ret;
}
+
int VSpace::inPixels(BufferView * bv) const
{
// Height of a normal line in pixels (zoom factor considered)
int const default_height = bv->text->defaultHeight(); // [pixels]
int retval = 0;
-
+
switch (kind_) {
case NONE:
// Value for this is already set
case DEFSKIP:
retval = bv->buffer()->params.getDefSkip().inPixels(bv);
break;
-
+
// This is how the skips are normally defined by
// LateX. But there should be some way to change
// this per document.
case SMALLSKIP:
retval = default_height / 4;
break;
-
+
case MEDSKIP:
retval = default_height / 2;
break;
-
+
case BIGSKIP:
retval = default_height;
break;
// leave space for the vfill symbol
retval = 3 * default_height;
break;
-
+
case LENGTH: {
int const default_width = bv->workWidth();
retval = len_.len().inPixels(default_width, default_height);
break;
}
-
+
}
return retval;
}