mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 10:19:33 +02:00
line spacing option
This commit is contained in:
parent
543f19d4a0
commit
0a90ed38cd
37 changed files with 68 additions and 28 deletions
|
@ -988,5 +988,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -996,5 +996,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -995,5 +995,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -1016,5 +1016,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -999,5 +999,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -1010,5 +1010,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -995,5 +995,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -988,5 +988,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -990,5 +990,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%"/>
|
||||
<node name="percent" value="E.g.: 125%"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -995,5 +995,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -1016,5 +1016,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -990,5 +990,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -983,5 +983,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -995,5 +995,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -981,5 +981,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -995,5 +995,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -990,5 +990,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -990,5 +990,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -992,5 +992,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -995,5 +995,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="Например: 20px, 10pt, 0.8em, 1ex, 120%"/>
|
||||
<node name="length" value="Например: -2px, 10pt, -0.8em, 1.1ex, -40%"/>
|
||||
<node name="percent" value="Например: 125%"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -990,5 +990,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -990,5 +990,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -980,5 +980,6 @@
|
|||
<node name="hint">
|
||||
<node name="positiveLength" value="E.g.: 20px, 10pt, 0.8em, 1ex, 120%" toBeTranslated="true"/>
|
||||
<node name="length" value="E.g.: -2px, 10pt, -0.8em, 1.1ex, -40%" toBeTranslated="true"/>
|
||||
<node name="percent" value="E.g.: 125%" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
||||
|
|
|
@ -254,24 +254,6 @@ public class PreferenceActivity extends ZLPreferenceActivity {
|
|||
textScreen.addOption(baseStyle.AutoHyphenationOption, "autoHyphenations");
|
||||
|
||||
final Screen moreStylesScreen = textScreen.createPreferenceScreen("more");
|
||||
|
||||
/*
|
||||
final ZLIntegerOption spacePercentOption = decoration.LineSpacePercentOption;
|
||||
final int[] spacingValues = new int[17];
|
||||
final String[] spacingKeys = new String[17];
|
||||
spacingValues[0] = -1;
|
||||
spacingKeys[0] = "unchanged";
|
||||
for (int j = 1; j < spacingValues.length; ++j) {
|
||||
final int val = 4 + j;
|
||||
spacingValues[j] = 10 * val;
|
||||
spacingKeys[j] = (char)(val / 10 + '0') + decimalSeparator + (char)(val % 10 + '0');
|
||||
}
|
||||
formatScreen.addPreference(new ZLIntegerChoicePreference(
|
||||
this, textScreen.Resource, "lineSpacing",
|
||||
spacePercentOption, spacingValues, spacingKeys
|
||||
));
|
||||
*/
|
||||
|
||||
for (ZLTextNGStyleDescription description : collection.getDescriptionList()) {
|
||||
final Screen ngScreen = moreStylesScreen.createPreferenceScreen(description.Name);
|
||||
ngScreen.addPreference(new FontPreference(
|
||||
|
@ -308,6 +290,11 @@ public class PreferenceActivity extends ZLPreferenceActivity {
|
|||
description.AlignmentOption,
|
||||
new String[] { "inherit", "left", "right", "center", "justify" }
|
||||
));
|
||||
ngScreen.addPreference(new StringPreference(
|
||||
this, description.LineHeightOption,
|
||||
StringPreference.Constraint.PERCENT,
|
||||
textScreen.Resource, "lineSpacing"
|
||||
));
|
||||
ngScreen.addPreference(new StringPreference(
|
||||
this, description.MarginTopOption,
|
||||
StringPreference.Constraint.LENGTH,
|
||||
|
|
|
@ -37,13 +37,17 @@ import org.geometerplus.zlibrary.ui.android.R;
|
|||
public class StringPreference extends DialogPreference {
|
||||
public static class Constraint {
|
||||
public static final Constraint LENGTH = new Constraint(
|
||||
"(-{0,1}([0-9]*\\.){0,1}[0-9]+(%|em|ex|px|pt)|)",
|
||||
"-{0,1}([0-9]*\\.){0,1}[0-9]+(%|em|ex|px|pt)|",
|
||||
"length"
|
||||
);
|
||||
public static final Constraint POSITIVE_LENGTH = new Constraint(
|
||||
"(([0-9]*\\.){0,1}[0-9]+(%|em|ex|px|pt)|)",
|
||||
"([0-9]*\\.){0,1}[0-9]+(%|em|ex|px|pt)|",
|
||||
"positiveLength"
|
||||
);
|
||||
public static final Constraint PERCENT = new Constraint(
|
||||
"([1-9][0-9]{1,2}%)|",
|
||||
"percent"
|
||||
);
|
||||
|
||||
private final Pattern myPattern;
|
||||
public final String HintKey;
|
||||
|
|
|
@ -35,6 +35,7 @@ public abstract class ZLTextDecoratedStyle extends ZLTextStyle {
|
|||
private boolean myIsBold;
|
||||
private boolean myIsUnderline;
|
||||
private boolean myIsStrikeThrough;
|
||||
private int myLineSpacePercent;
|
||||
|
||||
private boolean myIsNotCached = true;
|
||||
|
||||
|
@ -60,6 +61,7 @@ public abstract class ZLTextDecoratedStyle extends ZLTextStyle {
|
|||
myIsBold = isBoldInternal();
|
||||
myIsUnderline = isUnderlineInternal();
|
||||
myIsStrikeThrough = isStrikeThroughInternal();
|
||||
myLineSpacePercent = getLineSpacePercentInternal();
|
||||
|
||||
myIsNotCached = false;
|
||||
}
|
||||
|
@ -182,4 +184,13 @@ public abstract class ZLTextDecoratedStyle extends ZLTextStyle {
|
|||
return myFirstLineIndent;
|
||||
}
|
||||
protected abstract int getFirstLineIndentInternal(ZLTextMetrics metrics, int fontSize);
|
||||
|
||||
@Override
|
||||
public final int getLineSpacePercent() {
|
||||
if (myIsNotCached) {
|
||||
initCache();
|
||||
}
|
||||
return myLineSpacePercent;
|
||||
}
|
||||
protected abstract int getLineSpacePercentInternal();
|
||||
}
|
||||
|
|
|
@ -158,7 +158,7 @@ public class ZLTextExplicitlyDecoratedStyle extends ZLTextDecoratedStyle impleme
|
|||
return myEntry.getLength(LENGTH_RIGHT_INDENT, metrics, fontSize);
|
||||
}
|
||||
@Override
|
||||
public int getFirstLineIndentInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
protected int getFirstLineIndentInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
if (myEntry instanceof ZLTextCSSStyleEntry && !BaseStyle.UseCSSMarginsOption.getValue()) {
|
||||
return Parent.getFirstLineIndent(metrics);
|
||||
}
|
||||
|
@ -168,7 +168,8 @@ public class ZLTextExplicitlyDecoratedStyle extends ZLTextDecoratedStyle impleme
|
|||
}
|
||||
return myEntry.getLength(LENGTH_FIRST_LINE_INDENT, metrics, fontSize);
|
||||
}
|
||||
public int getLineSpacePercent() {
|
||||
@Override
|
||||
protected int getLineSpacePercentInternal() {
|
||||
// TODO: implement
|
||||
return Parent.getLineSpacePercent();
|
||||
}
|
||||
|
|
|
@ -105,20 +105,24 @@ public class ZLTextNGStyle extends ZLTextDecoratedStyle {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getLeftIndentInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
protected int getLeftIndentInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
return myDescription.getLeftIndent(metrics, Parent.getLeftIndent(metrics), fontSize);
|
||||
}
|
||||
@Override
|
||||
public int getRightIndentInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
protected int getRightIndentInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
return myDescription.getRightIndent(metrics, Parent.getRightIndent(metrics), fontSize);
|
||||
}
|
||||
@Override
|
||||
public int getFirstLineIndentInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
protected int getFirstLineIndentInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
return myDescription.getFirstLineIndent(metrics, Parent.getFirstLineIndent(metrics), fontSize);
|
||||
}
|
||||
public int getLineSpacePercent() {
|
||||
// TODO: implement
|
||||
return Parent.getLineSpacePercent();
|
||||
@Override
|
||||
protected int getLineSpacePercentInternal() {
|
||||
final String lineHeight = myDescription.LineHeightOption.getValue();
|
||||
if (!lineHeight.matches("[1-9][0-9]*%")) {
|
||||
return Parent.getLineSpacePercent();
|
||||
}
|
||||
return Integer.valueOf(lineHeight.substring(0, lineHeight.length() - 1));
|
||||
}
|
||||
@Override
|
||||
protected int getVerticalAlignInternal(ZLTextMetrics metrics, int fontSize) {
|
||||
|
|
|
@ -42,6 +42,7 @@ public class ZLTextNGStyleDescription {
|
|||
public final ZLStringOption TextIndentOption;
|
||||
public final ZLStringOption AlignmentOption;
|
||||
public final ZLStringOption VerticalAlignOption;
|
||||
public final ZLStringOption LineHeightOption;
|
||||
|
||||
private static ZLStringOption createOption(String selector, String name, Map<String,String> valueMap) {
|
||||
return new ZLStringOption("Style", selector + "::" + name, valueMap.get(name));
|
||||
|
@ -63,6 +64,7 @@ public class ZLTextNGStyleDescription {
|
|||
TextIndentOption = createOption(selector, "text-indent", valueMap);
|
||||
AlignmentOption = createOption(selector, "text-align", valueMap);
|
||||
VerticalAlignOption = createOption(selector, "vertical-align", valueMap);
|
||||
LineHeightOption = createOption(selector, "line-height", valueMap);
|
||||
}
|
||||
|
||||
int getFontSize(ZLTextMetrics metrics, int baseFontSize) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue