<!DOCTYPE html>
<html  lang="en" >
<head>
<meta charset="utf-8"/>
<title>CSS text, linebreaks: centred punctuation (normal,ja)</title>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#line-break-property">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<meta name="assert" content="When the language is Japanese, and line-break:normal, a browser will NOT allow a break before one of the centred punctuation characters listed.">
<style type="text/css">
@font-face {
    font-family: 'mplus-1p-regular';
    src: url('/fonts/mplus-1p-regular.woff') format('woff');
    }
#wrapper { position: relative; }
.test { color: red; }
.test, .ref { font-size: 30px; font-family: mplus-1p-regular, sans-serif; width: 185px; padding: 0; border: 1px solid orange; line-height: 1em; }
</style>
<style>
.test { line-break: normal; }
</style>
<script>
var charlist = `30FB  KATAKANA MIDDLE DOT
FF1A  FULLWIDTH COLON
FF1B  FULLWIDTH SEMICOLON
FF65  HALFWIDTH KATAKANA MIDDLE DOT
203C  DOUBLE EXCLAMATION MARK
2047  DOUBLE QUESTION MARK
2048  QUESTION EXCLAMATION MARK
2049  EXCLAMATION QUESTION MARK
FF01  FULLWIDTH EXCLAMATION MARK
FF1F  FULLWIDTH QUESTION MARK`
</script>
</head>
<body>
<script>
var lines = charlist.split('\n')
var out = '<div id="log"></div>\n'
for (var i=0;i<lines.length;i++) {
	// get the data
	var firstSpace = lines[i].indexOf(' ')
	var hex = lines[i].substr(0,firstSpace)
	var name = lines[i].substr(firstSpace)
	// make a test
	out +=  '<div class="wrapper"><div>'+hex+'</div>' +
	'<div class="test" id="test'+i+'" lang="ja">文文文文文文&#x'+hex+';字<span id="testSpan'+i+'">字</span></div>' +
	 '<div class="ref" id="ref'+i+'" lang="ja">文文文文文<br/>文&#x'+hex+';字<span id="refSpan'+i+'">字</span></div>' +
	 '</div>'
	}
function spansNearEnough(counter) {
  return Math.abs( document.getElementById('testSpan'+counter).getBoundingClientRect().left
           - document.getElementById('refSpan'+counter).getBoundingClientRect().left ) < 1;
}

document.querySelector('body').innerHTML = out
setup({explicit_done: true});

document.fonts.ready.then(validate);

function validate() {
  for (i=0;i<lines.length;i++) {
    test(function() {
      assert_true(spansNearEnough(i));
    }, lines[i]+' may NOT appear at line start if ja and normal');
    // Hide successful tests.
    if (spansNearEnough(i)) document.getElementById('test'+i).parentNode.style.display = 'none'
  }
  done();
}
</script>
<!-- Notes:
The test creates a box with room for 6 characters, causing wrapping to occur either between the 6th and the 7th character, or before the 6th if the breaks after the 6th or before the 7th are prohibited.

It also creates the expected behaviour with a ref instance, using <br/>. Each line ends with a span. The test then checks whether the left edge of the span is in the same place in test and ref instance.
 -->
</body>
</html>
