示例#1
0
// Note that this is supposed to return a fully realized font.
FontInfo Text::labelFont(Paragraph const & par) const
{
	Buffer const & buffer = owner_->buffer();
	Layout const & layout = par.layout();

	if (!par.getDepth()) {
		FontInfo lf = layout.reslabelfont;
		// In case the default family has been customized
		if (layout.labelfont.family() == INHERIT_FAMILY)
			lf.setFamily(buffer.params().getFont().fontInfo().family());
		return lf;
	}

	FontInfo font = layout.labelfont;
	// Realize with the fonts of lesser depth.
	font.realize(buffer.params().getFont().fontInfo());

	return font;
}
示例#2
0
void sgml::openTag(Buffer const & buf, odocstream & os,
	OutputParams const & runparams, Paragraph const & par)
{
	Layout const & style = par.layout();
	string const & name = style.latexname();
	string param = style.latexparam();
	Counters & counters = buf.params().documentClass().counters();

	string id = par.getID(buf, runparams);

	string attribute;
	if (!id.empty()) {
		if (param.find('#') != string::npos) {
			string::size_type pos = param.find("id=<");
			string::size_type end = param.find(">");
			if( pos != string::npos && end != string::npos)
				param.erase(pos, end-pos + 1);
		}
		attribute = id + ' ' + param;
	} else {
		if (param.find('#') != string::npos) {
			// FIXME UNICODE
			if (!style.counter.empty())
				// This uses InternalUpdate at the moment becuase sgml output
				// does not do anything with tracked counters, and it would need
				// to track layouts if it did want to use them.
				counters.step(style.counter, InternalUpdate);
			else
				counters.step(from_ascii(name), InternalUpdate);
			int i = counters.value(from_ascii(name));
			attribute = subst(param, "#", convert<string>(i));
		} else {
			attribute = param;
		}
	}
	openTag(os, name, attribute);
}
示例#3
0
void params2string(Paragraph const & par, string & data)
{
	// A local copy
	ParagraphParameters params = par.params();

	// This needs to be done separately
	params.labelWidthString(par.getLabelWidthString());

	ostringstream os;
	params.write(os);

	Layout const & layout = par.layout();

	// Is alignment possible
	os << "\\alignpossible " << layout.alignpossible << '\n';

	/// set default alignment
	os << "\\aligndefault " << layout.align << '\n';

	/// paragraph is always in inset. This is redundant.
	os << "\\ininset " << 1 << '\n';

	data = os.str();
}
示例#4
0
void writePlaintextParagraph(Buffer const & buf,
                             Paragraph const & par,
                             odocstream & os,
                             OutputParams const & runparams,
                             bool & ref_printed)
{
    int ltype = 0;
    depth_type ltype_depth = 0;
    depth_type depth = par.params().depth();

    // First write the layout
    string const tmp = to_utf8(par.layout().name());
    if (compare_ascii_no_case(tmp, "itemize") == 0) {
        ltype = 1;
        ltype_depth = depth + 1;
    } else if (compare_ascii_no_case(tmp, "enumerate") == 0) {
        ltype = 2;
        ltype_depth = depth + 1;
    } else if (contains(ascii_lowercase(tmp), "ection")) {
        ltype = 3;
        ltype_depth = depth + 1;
    } else if (contains(ascii_lowercase(tmp), "aragraph")) {
        ltype = 4;
        ltype_depth = depth + 1;
    } else if (compare_ascii_no_case(tmp, "description") == 0) {
        ltype = 5;
        ltype_depth = depth + 1;
    } else if (compare_ascii_no_case(tmp, "abstract") == 0) {
        ltype = 6;
        ltype_depth = 0;
    } else if (compare_ascii_no_case(tmp, "bibliography") == 0) {
        ltype = 7;
        ltype_depth = 0;
    } else {
        ltype = 0;
        ltype_depth = 0;
    }

    /* the labelwidthstring used in lists */

    /* noindent ? */

    /* what about the alignment */

    // runparams.linelen == 0 is special and means we don't have paragraph breaks

    string::size_type currlinelen = 0;

    os << docstring(depth * 2, ' ');
    currlinelen += depth * 2;

    //--
    // we should probably change to the paragraph language in the
    // support/gettext.here (if possible) so that strings are output in
    // the correct language! (20012712 Jug)
    //--
    switch (ltype) {
    case 0: // Standard
    case 4: // (Sub)Paragraph
    case 5: // Description
        break;

    case 6: // Abstract
        if (runparams.linelen > 0) {
            os << buf.B_("Abstract") << "\n\n";
            currlinelen = 0;
        } else {
            docstring const abst = buf.B_("Abstract: ");
            os << abst;
            currlinelen += abst.length();
        }
        break;

    case 7: // Bibliography
        if (!ref_printed) {
            if (runparams.linelen > 0) {
                os << buf.B_("References") << "\n\n";
                currlinelen = 0;
            } else {
                docstring const refs = buf.B_("References: ");
                os << refs;
                currlinelen += refs.length();
            }
            ref_printed = true;
        }
        break;

    default: {
        docstring const label = par.params().labelString();
        if (!label.empty()) {
            os << label << ' ';
            currlinelen += label.length() + 1;
        }
        break;
    }

    }

    if (currlinelen == 0) {
        pair<int, docstring> p = addDepth(depth, ltype_depth);
        os << p.second;
        currlinelen += p.first;
    }

    docstring word;

    for (pos_type i = 0; i < par.size(); ++i) {
        // deleted characters don't make much sense in plain text output
        if (par.isDeleted(i))
            continue;

        char_type c = par.getUChar(buf.params(), i);

        if (par.isInset(i) || c == ' ') {
            if (runparams.linelen > 0 &&
                    currlinelen + word.length() > runparams.linelen) {
                os << '\n';
                pair<int, docstring> p = addDepth(depth, ltype_depth);
                os << p.second;
                currlinelen = p.first;
            }
            os << word;
            currlinelen += word.length();
            word.erase();
        }

        if (par.isInset(i)) {
            OutputParams rp = runparams;
            rp.depth = par.params().depth();
            int len = par.getInset(i)->plaintext(os, rp);
            if (len >= Inset::PLAINTEXT_NEWLINE)
                currlinelen = len - Inset::PLAINTEXT_NEWLINE;
            else
                currlinelen += len;
            continue;
        }

        switch (c) {
        case ' ':
            os << ' ';
            currlinelen++;
            break;

        case '\0':
            LYXERR(Debug::INFO, "writePlaintextFile: NUL char in structure.");
            break;

        default:
            word += c;
            break;
        }
    }

    // currlinelen may be greater than runparams.linelen!
    // => check whether word is empty and do nothing in this case
    if (!word.empty()) {
        if (runparams.linelen > 0 &&
                currlinelen + word.length() > runparams.linelen) {
            os << '\n';
            pair<int, docstring> p = addDepth(depth, ltype_depth);
            os << p.second;
            currlinelen = p.first;
        }
        os << word;
    }
}
示例#5
0
void sgml::closeTag(odocstream & os, Paragraph const & par)
{
	Layout const & style = par.layout();
	closeTag(os, style.latexname());
}