Spec: http://dev.w3.org/csswg/css-device-adapt/ Currently, the actual viewport is used by the layout task as part of the reflow, and the compositor uses the zoom constraints. I'm not sure if anywhere else currently needs access to the constraints (i.e. there's no CSSOM as far as I can tell). I did not implement sections 9 (viewport <META>) or 10 (handling 'auto' for 'zoom'). Source-Repo: https://github.com/servo/servo Source-Revision: ccf1e6b9a701cf4ff010fa1f1b4ba9d656d962af
50 lines
1.6 KiB
Rust
50 lines
1.6 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
use selectors::parser::ParserContext as SelectorParserContext;
|
|
use cssparser::{Parser, SourcePosition};
|
|
use url::{Url, UrlParser};
|
|
use log;
|
|
|
|
use stylesheets::Origin;
|
|
|
|
pub struct ParserContext<'a> {
|
|
pub stylesheet_origin: Origin,
|
|
pub base_url: &'a Url,
|
|
pub selector_context: SelectorParserContext,
|
|
}
|
|
|
|
impl<'a> ParserContext<'a> {
|
|
pub fn new(stylesheet_origin: Origin, base_url: &'a Url) -> ParserContext<'a> {
|
|
let mut selector_context = SelectorParserContext::new();
|
|
selector_context.in_user_agent_stylesheet = stylesheet_origin == Origin::UserAgent;
|
|
ParserContext {
|
|
stylesheet_origin: stylesheet_origin,
|
|
base_url: base_url,
|
|
selector_context: selector_context,
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
impl<'a> ParserContext<'a> {
|
|
pub fn parse_url(&self, input: &str) -> Url {
|
|
UrlParser::new().base_url(self.base_url).parse(input)
|
|
.unwrap_or_else(|_| Url::parse("about:invalid").unwrap())
|
|
}
|
|
}
|
|
|
|
|
|
/// Defaults to a no-op.
|
|
/// Set a `RUST_LOG=style::errors` environment variable
|
|
/// to log CSS parse errors to stderr.
|
|
pub fn log_css_error(input: &mut Parser, position: SourcePosition, message: &str) {
|
|
if log_enabled!(log::INFO) {
|
|
let location = input.source_location(position);
|
|
// TODO eventually this will got into a "web console" or something.
|
|
info!("{}:{} {}", location.line, location.column, message)
|
|
}
|
|
}
|